Risultati da 1 a 6 di 6

Discussione: Php allegare file ad una mail

  1. #1
    IImanuII è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    244

    Php allegare file ad una mail

    Salve a tutti, avrei bisogno di una mano.

    Ho creato un form per inviare mail e funziona, tuttavia necessito di allegare dei file alle mail che tale form invia.

    In rete ho trovato vari esempi ma nessuno funziona. Questo mi sembrava molto valido e versatile:

    http://www.youtube.com/watch?feature...notation_79594

    Tuttavia la mail che arriva, arriva con gli allegati di 0 byte e con il nome cambiato.

    In giro ho letto che dovrei utilizzare phpmailer solo che non ho ben capito come fare. Inoltre mi chiedevo se tale metodo può essere adattato al mio form oppure devo crearne uno nuovo.

    In rete ho trovato questo script che funziona ma non bene. Se i campi li lascio vuoti non appare il messaggio d'errore

    Codice:
    <form action="form.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="destinatario" value="info@ilmiosito.it">
    <table  style="border:0;color:white;float:left">
    <tr>	
      <td>Tua Mail:</td>
      <td><input type="text" name="mittente" value="" style="width: 300px" /><br><br></td>
    </tr>
    <tr>
      <td>Oggetto:</td>
      <td><input type="text" name="oggetto" value="" style="width: 300px" /><br><br></td>
    </tr>
    <tr>
      <td>Messaggio:</td>
      <td style="width:300px"><textarea cols="20" rows="4" name="testomessaggio" style="width:300px;overflow:hidden;height:130px; max-width:300px;max-height:130px"></textarea><br>
      <br></td>
      </tr>
    <tr>
      <td>Allega file:</td>
      <td style="width:305px"><input type="file" name="attachment" style="width:305px;" class="file_1"/><br>
      <br><br></td>
    </tr>
    <tr>
      <td colspan="2"><input type="image"  value="submit"  src="images/invia2.png" style="float:right" /></td>
    </tr>
    </table>
    </form>
    Codice:
    <?php 
    // 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>"; 
    } 
    ?>
    Grazie

    Manu

  2. #2
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,437
    ciao
    abbandona la funzione mail e prendi la classe phpmailer (trovi un articolo qui su mrwm linquaggi del web)

  3. #3
    IImanuII è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    244
    Citazione Originariamente Scritto da borgo italia Visualizza Messaggio
    ciao
    abbandona la funzione mail e prendi la classe phpmailer (trovi un articolo qui su mrwm linquaggi del web)
    Ciao in realtà vorrei utilizzare questo solo che le mail ricevute hanno allegati di 0 byte T.T


    Il tutorial a cui ti riferisci sarebbe questo?

  4. #4
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,437
    ciao
    Il tutorial a cui ti riferisci sarebbe questo?
    si
    usando mail() ci sono quei problemi.
    comunque se hai pazienza ti posto come faccio io.

  5. #5
    IImanuII è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    244
    Citazione Originariamente Scritto da borgo italia Visualizza Messaggio
    ciao
    si
    usando mail() ci sono quei problemi.
    comunque se hai pazienza ti posto come faccio io.
    Attendo in trepidante attesa ^^

  6. #6
    L'avatar di Eliox
    Eliox è offline Moderatore
    Data Registrazione
    Feb 2005
    Messaggi
    4,392
    Nel tutorial c'è una parte appositamente dedicata all'invio degli allegati.

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •