Il metodo ufficiale per inviare email da PHP è l’utilizzo della funzione mail. Il suo utilizzo è semplice ma abbastanza macchinoso e lo diventa ancor di più quando bisogna allegare un file al messaggio di posta. Ecco perché buona parte degli sviluppatori sfrutta delle classi, la mia preferita è PHPMailer.

Questa classe, creata da Marcus Bointon, permette con estrema facilità di inviare un email personalizzando moltissimi parametri e permettendo l’inserimento di file allegati.

Bisogna però fare una premessa doverosa, per far si che si possa allegare un file, tale file deve essere presente sul server.

Creiamo il file in PHP da allegare all’email

Ipotizziamo di scrivere un file di testo da allegare all’email:

$filepath = "nome_file.txt";
$fhandler = fopen($filepath,"w");
fwrite($fhandler, "Contenuto del file!");
fclose($fhandler);

Dichiareremo la variabile $filepath affinché qualora decidessimo di cambiare il nome del file o il percorso ne saremmo facilitati.

Apriremo il file con il comando fopen e successivamente vi scriveremo all’interno il contenuto. Una volta fatto questo chiuderemo il file e comparirà sul nostro server.

Se non avete dichiarato una sotto cartella nel $filepath il file verrà creato nella stessa directory dove c’è lo script che lo crea*

Inviamo l’email con allegato

Se avete scaricato da GitHub PHPMailer vi ritroverete con un file da scompattare all’interno del quale troverete due file strettamente necessari PHPMailerAutoload.php e class.phpmailer.php.

Sono da caricare entrambe nella directory del vostro sito ma basterà collegare soltanto il primo per poi stanziare la classe.

require "PHPMailerAutoload.php";
$mail = new PHPMailer;

Una volta fatto ciò dovrete specificare mittente e destinatario del vostro messaggio:

$mail->From = "mittente@dominio.com";
$mail->addAddress("destinatario@dominio.com");

Impostiamo l’oggetto dell’email:

$mail->Subject = "Email con allegato!";

Preparate il corpo del messaggio in una variabile e impostatelo.

$messaggio = "

Hei!

Questo è il testo del messaggio!

"; $mail->Body = $messaggio;

In questo caso il nostro messaggio contiene dei tag HTML quindi sarà necessario specificare che il messaggio dovrà avere tale formato (in caso contrario partirà come semplice testo).

$mail->isHTML(true);

Il messaggio è pronto, manca solo l’allegato! Ci viene in soccorso la variabile $filepath precedentemente valorizzata che segnalerà al metodo addAttachment la posizione del file.

$mail->addAttachment($filepath);

Possiamo inviare l’email e segnalare eventuali errori!

if (!$mail->send()) {
   echo 'Impossibile inviare il messaggio con allegato!.';
   echo 'Mailer Error: ' . $mail->ErrorInfo;
   exit;
}

Lo script è pronto, a questo punto sta a voi utilizzarlo nel metodo più opportuno!