Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Form PHP per inviare mail con allegato file predefinito prelevato dal server web

    Salve;

    houn problemino che spero di risolvere con aiutino.

    Ho uno script in PHP e form HTML che mi consente di inviare posta coon allegato da pagina web .html verso account di posta utente.

    Funziona benissimo ma non secondo mie esigenze.

    Mi occorrerebbe riuscire ad inviare in allegato un file predefinito situato in una determinata cartella di un server web verso un'utente che ha un account di posta elettronica da form mail su pagina html.

    Ho provato a fare varie modifiche ma non sono riuscito nell'intento.

    L'unica cosa che ottengo e' inviare messaggi testuali ed allegati prelevati dal mio pc.

    Con le varie modifiche ho ottenuto solo invio di messaggi di testo senza mai riuscire ad allegare un file situato sul server.

    Mi occorrerebbe sapere come posso fare ad indicare allo script PHP o nel campo Attacment del form il nome del file fisso (o predefinito)

    Qesta form dovrebbe inviare sempre lo stesso file sul server inserendo solo l'indirizzo e-mail del destinatario che ovviamente sarà inserito dal richiedente destinatario stesso.

    Buona giornata
    Nicola

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Ho provato a fare varie modifiche ma non sono riuscito nell'intento.
    Cosa hai provato? Non avere paura ad allegarci qualche linea di codice per darci una idea.

  3. #3
    Il solito codice che trovi in internet.

    Un form html ed uno script php a cui il form passa i valori che gli consentono di compilare una mail e spedirla

    Codice HTML:
    codice:
    <!---CODICE MODIFICATO --->
    <form action="formmail.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="mittente" value="EMAIL_SPEDIZIONIERE@SITO.IT" />
    <table border="0">
    <tr>
      <td>Tua Mail:</td>
      <td><input type="text" name="destinatario" value=" " /></td>
    </tr>
    <tr>
      <td>Oggetto:</td>
      <td><input type="hidden" name="oggetto" value="MESSAGGIO OGGETTO DELLA MAIL" /></td>
    </tr>
    <tr>
      <td>Messaggio:</td>
      <td><input type="hidden" name="messaggio" value="MESSAGGIO TESTUALE ESPLICATIVO NEL CORPO DELLA MAIL" /></td>
      </tr>
    <tr>
      <td>Allega file:</td>
      <td><input type="file" name="allegato" /></td> <!--- CAMPO PRELEVA FILE DA PC - MA A ME SERVE UN CAMPO "hidden" CHE PRELEVI FILE PREDEFINITO IN "valore" DA SERVER --->
    </tr>
    <tr>
      <td colspan="2"><input type="submit" value="Invia" /></td>
    </tr>
    </table>
    </form>
    Codice PHP (Integro come prelevato)
    codice:
    // Recupero il valore dei campi del form
    $destinatario = $_POST['destinatario'];
    $mittente = $_POST['mittente'];
    $oggetto = $_POST['oggetto'];
    $messaggio = $_POST['messaggio'];
    // Valorizzo le variabili relative all'allegato
    $allegato = $_FILES['allegato']['tmp_name'];
    $allegato_type = $_FILES['allegato']['type'];
    $allegato_name = $_FILES['allegato']['name'];
    // Creo 2 variabili che riempirò più avanti...
    $headers = "From: " . $mittente;
    $msg = "";
    // Verifico se il file è stato caricato correttamente via HTTP
    // In caso affermativo proseguo nel lavoro...
    if (is_uploaded_file($allegato))
    {
      // Apro e leggo il file allegato
      $file = fopen($allegato,'rb');
      $data = fread($file, filesize($allegato));
      fclose($file);
      // Adatto il file al formato MIME base64 usando base64_encode
      $data = chunk_split(base64_encode($data));
      // Genero il "separatore"
      // Serve per dividere, appunto, le varie parti del messaggio.
      // Nel nostro caso separerà la parte testuale dall'allegato
      $semi_rand = md5(time());
      $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
      
      // Aggiungo le intestazioni necessarie per l'allegato
      $headers .= "\nMIME-Version: 1.0\n";
      $headers .= "Content-Type: multipart/mixed;\n";
      $headers .= " boundary=\"{$mime_boundary}\"";
      // Definisco il tipo di messaggio (MIME/multi-part)
      $msg .= "This is a multi-part message in MIME format.\n\n";
      // Metto il separatore
      $msg .= "--{$mime_boundary}\n";
      // Questa è la parte "testuale" del messaggio
      $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
      $msg .= "Content-Transfer-Encoding: 7bit\n\n";
      $msg .= $messaggio . "\n\n";
      // Metto il separatore
      $msg .= "--{$mime_boundary}\n";
      // Aggiungo l'allegato al messaggio
      $msg .= "Content-Disposition: attachment;\n";
      $msg .= " filename=\"{$allegato_name}\"\n";
      $msg .= "Content-Transfer-Encoding: base64\n\n";
      $msg .= $data . "\n\n";
      // chiudo con il separatore
      $msg .= "--{$mime_boundary}--\n";
    }
    else
    {
      $msg = $messaggio;
    }
    // Invio la mail
    if (mail($destinatario, $oggetto, $msg, $headers))
    {
      echo "<p>Mail inviata con successo!</p>";
    }else{
      echo "<p>Errore!</p>";
    }
    Tutto funziona benissimo se allega da PC.
    Funziona bene anche con il form modificato ma non allega file da server (consegna solo testi)

    Grazie .KURT per l'intervento
    Nicola

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Ti propongo ti usufruire di una delle numerose librerie che ti forniscono il loro livello di astrazione (consiglio: http://swiftmailer.org) per fare quello che ti serve. Prova scrivere qualche riga (dovrebbe riuscirti facilmente, è ben documentato), e se comunque riscontri qualche difficoltà, qui possiamo darti qualche indicazione.
    Ultima modifica di .Kurt; 12-12-2014 a 14:04

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.