back to top

Inviare email con la classe PHPMailer

La classe PHPMailer è una classe utilizzatissima dagli sviluppatori PHP perchè permette di inviare comodamente messaggi di posta elettronica sia come semplice testo che in formato HTML, senza dimenticare la possibilità di inviare file in allegato alle nostre email.

Cos’è e come si installa PHPMailer

PHPmailer è uno script open source, può essere liberamente scaricato dal sito ufficiale, utilizzato gratuitamente e modificato a seconda delle diverse esigenze purchè non vengano cancellati dal sorgente i riferimenti al copyright degli autori.

Intallare PHPmailer è semplicissimo e richiede pochi passaggi. Una volta scaricato la cartella compressa contenente i file dell’applicazione, potremo decomprimere quest’ultima in una directory a scelta all’interno della root del Web server.

Se lavoriamo su Linux tamite linea di comando, magari perchè utilizziamo un server SSH, dovremo scaricare il pacchetto "phpmailer.tar.gz", decomprimere il file compresso e successivamente scompattare l’archivio ".tar" con i seguenti comandi:

gunzip phpmailer.tar.gz
tar -xf phpmailer.tar

Fatto questo, ora sarà sufficiente richiamare la classe attraverso il costrutto require ogni volta che vorremo utilizzarla nelle nostre applicazioni PHP. Se per esempio abbiamo salvato i file di PHPMailer in una directory chiamata per l’appunto "phpmailer", potremo utilizzere una sintassi simile a quella del codice seguente:

require "phpmailer/class.phpmailer.php";

In alternativa a require potremmo utilizzare anche il costrutto include per ottenere lo stesso risultato:

require "phpmailer/class.phpmailer.php";

a questo punto il gioco è fatto, non avremo bisogno di ulteriori setaggi.

PHPmailer, può funzionare in due modi: o tramite il metodo SMTP o sfruttando il metodo mail; nel primo caso ci si connetterà plausibilmente ad un provider esterno, nel secondo caso invece si sfrutterà il servizio di invio del server locale.

Va da sè che il metodo SMTP potrà essere utilizzato anche da locale, ma in questo caso consigliamo di sfuttare le potenzialità di mail che ci consentiranno di eseguire le nostre applicazioni più velocemente.

Inviare semplici email di testo con PHPMailer

Una volta terminate le opportune operazioni di installazione e configurazione di PHPMailer, saremo pronti ad utilizzare la classe per l’invio delle email. Nel nostro primo esempio vedremo quale sia il listato necessario per l’invio di una semplice email di testo:

<?php
//includiamo la classe PHPMailer
require "phpmailer/class.phpmailer.php";

//istanziamo la classe
$messaggio = new PHPmailer();

//implementiamo un SMTP esterno
$messaggio->IsSMTP();
$messaggio->Host = "smtp.provider.com";
$messaggio->SMTPSecure = "tls";
$messaggio->SMTPAuth = true;
$messaggio->Username = "mio_username";
$messaggio->Password = "mia_password";
$messaggio->Port = 25;

//definiamo le intestazioni e il corpo del messaggio
$messaggio->From='[email protected]';
$messaggio->AddAddress('[email protected]');
$messaggio->AddReplyTo('[email protected]'); 
$messaggio->Subject='Prova.';
$messaggio->Body=stripslashes('Ciao!!!!');

//definiamo i comportamenti in caso di invio corretto 
//o di errore
if(!$messaggio->Send()){ 
  echo $messaggio->ErrorInfo; 
}else{ 
  echo 'Email inviata correttamente!';
}

//chiudiamo la connessione
$messaggio->SmtpClose();
unset($messaggio);
?>

Il codice presentato in esempio è abbastanze chiaro anche ad una prima lettura, da notare come la classe preveda anche di inizializzare comportamenti predefini in caso di errore nell’invio del messaggio:

if(!$messaggio->Send()){ 
  echo $messaggio->ErrorInfo; 
}

Se abbiamoi deciso di non sfruttare il metodo SMTP e di lavorare unicamente tramite il metodo locale mail, sarà necessario commentare o eliminare la chiamata al metodo IsSMTP() (e le righe successive) e SmtpClose().

Inviare email in formato HTML con PHPMailer

Per inviare email in formato HTML tramite la classe PHPMailer, dovremo fare poche modifiche rispetto al codice utilizzato per il messaggio in semplice formato testo, basterà indicare nel corpo del messaggio i tag HTML che vogliamo formattino il nostro testo:

<?php
require "phpmailer/class.phpmailer.php";

//istanziamo la classe
$messaggio = new PHPmailer();

//settiamo su true il metodo che indica alla classe il formato HTML
$messaggio->IsHTML(true);

//intestazioni e corpo dell'email
$messaggio->From='[email protected]';
$messaggio->AddAddress('[email protected]');
$messaggio->AddReplyTo('[email protected]'); 
$messaggio->Subject='Prova formato HTML';

//inseriamo i tag HTML e i CSS per formattare il messaggio
$messaggio->Body = '<html><head><style>';
$messaggio->Body .= 'p {color:#444444;text-align:left;font-size:15px}';
$messaggio->Body .= 'span.evidenziatore {background-color:#FF0000;color:#000000;}';
$messaggio->Body .= '</style></head><body>';
$messaggio->Body .= '<center><p><span class="evidenziatore">Lorem ipsum dolor sit amet</span>, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p></center>';
$messaggio->Body .= '</body></html>';

//parte relativa all'invio
if(!$messaggio->Send()){ 
  echo $messaggio->ErrorInfo; 
}else{ 
  echo 'Email inviata correttamente!';
}
unset($messaggio);
?>

Anche in questo caso, valgono le avvertenze fatte per l’uso del metodo mail in alternativa ad SMTP; da notare come la classe rilevi il formato dell’email sulla base della chiamata del metodo IsHTML() a cui abbiamo passato l’argomento TRUE.

Inviare un’email con immagine utilizzando PHPMailer

La classe PHPMailer ci consente di inviare con semplicità anche email contenenti immagini; anche in questo caso la sintassi da utilizzare non è particolarmente complicata, sarà sufficiente indicare nel corpo del messaggio il percoso all’immagine che intendiamo mostrare al nostro destinatario:

<?php
require "phpmailer/class.phpmailer.php";
$messaggio = new PHPmailer();
$messaggio->IsHTML(true);
$messaggio->From = '[email protected]';
$messaggio->AddAddress('[email protected]');
$messaggio->AddReplyTo('[email protected]'); 
$messaggio->Subject = 'Formato HTML con immagine.';
$messaggio->Body = '<html><body><center>Il logo di MRW.it<br>';

//percorso all'immagine
$messaggio->Body .= '<img src="https://www.mrw.it/img/logo.png">';

$messaggio->Body .= '</center></body></html>'; 
if(!$messaggio->Send()){
  echo $messaggio->ErrorInfo; 
}else{
  echo 'Email inviata correttamente!';
}
unset($messaggio);
?>

Chiaramente, con un pò di intraprendenza, un modulo form e qualche riga di listato sarà molto semplice sfruttare la classe PHPMailer per creare efficienti script destinati all’invio delle nostre newsletter.

Inviare allegati con PHPMailer

Passiamo ora all’ultimo esempio sull’utilizzo della classe PHPMailer, cioè l’invio di messaggi di posta elettronica corredati da file in allegato; passiamo subito al codice necessario per l’operazione:

<?php
require "phpmailer/class.phpmailer.php";
$messaggio = new PHPmailer();
$messaggio->From='[email protected]';
$messaggio->AddAddress('[email protected]');
$messaggio->AddReplyTo('[email protected]'); 
$messaggio->Subject='Email con allegato';
$messaggio->Body='Invio file Pdf';

//percorso all'allegato
$messaggio->AddAttachment('/percorso/completo/file.pdf');
if(!$messaggio->Send()){
  echo $messaggio->ErrorInfo; 
}else{ 
  echo 'Email inviata correttamente!';
}
unset($messaggio); 
?>

Anche in questo caso le osservazioni da fare sono ben poche, si noterà in particolare che l’invio dell’allegato è determinato all’introduzione di un metodo, AddAttachment() a cui passeremo come argomento il percorso relativo alla cartella che contiene il file da inviare in allegato.

Conclusioni

In conclusione, possimo tranquillamente affermare che la classe PHPMailer costituisce un ottima alternativa alla creazione di articolati script basati sull’utilizzo della funzione mail() di PHP.

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.

Leggi anche...

Correggere l’errore the uploaded file exceeds the upload_max_filesize directive in php.ini

L'errore the uploaded file exceeds the upload_max_filesize directive in...

Cannot modify header information – headers already sent: come risolvere l’errore PHP

L'errore di PHP cannot modify header information - headers...

Ricavare l’estensione di un file con PHP

Quando si lavora con i file in un'applicazione web,...

GD Library: creazione, manipolazione e ridimensionamento immagini con PHP

Le librerie GD (o GD Library), sono componenti fondamentali...

PHP: impostare il fuso orario italiano

Le tue pagine PHP non mostrano l’orario corretto? Probabilmente...
Pubblicitร