Skip to content

Inviare email con allegato in PHP

Torna agli articoli

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

Le opzioni di utilizzo di PHPMailer sono due, la più comune tra gli sviluppatori, ovvero l’installazione da composer, oppure l’installazione manuale.

Installazione di PHPMailer senza composer

Per quanto riguarda l’installazione manuale, se volete scaricare PHPMailer dal repository Github, è importante sapere che dovrete fare riferimento alla versione 5.2. Le successive, non includono l’autoloader originale di PHPMailer, proprio perchè utilizzano composer e il relativo autoloader.

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;

Installazione di PHPMailer con composer

L’installazione con composer prevede l’utilizzo di una console, che siate voi in SSH sul server oppure sul vostro computer, aprite il terminale, recatevi nella directory del vostro progetto/sito e digitate:

composer require phpmailer/phpmailer

Oppure se avete già un file composer.json, potete inserire nel vostro file la voce:

"phpmailer/phpmailer": "^6.5"

Quindi lanciare da console terminale il comando composer update.

A questo punto, vi basterà, specificare l’utilizzo delle classi, richiamare l’autoload di composer e stanziare la classe:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require "vendor/autoload.php";

$mail = new PHPMailer(true);

Come inviare un email con allegato con PHP Mailer

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

$mail->From = "[email protected]";
$mail->addAddress("[email protected]");

Impostiamo l’oggetto dell’email:

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

Preparate il corpo del messaggio in una variabile e impostatelo.

$messaggio = "<strong>Hei!</strong>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!

Preventivo Gratuito