Come ho già scritto più di una volta, da un pò di tempo a questa parte sono impegnato nello sviluppo di un software scritto in PHP+MYSQL che utilizziamo al lavoro.
Il software in questione si occupa anche di mandare mail ai clienti e per un pò di tempo abbiamo avuto problemi con mail che tornavano indietro contrassegnate come spam (non erano spam ovviamente) o mail che venivano recapitate ma risultavano illegibili sul webmail del cliente.
Dopo una serie di ricerche in internet e qualche consultazione con gente più esperta di me ho scoperto l’esistenza di phpmailer.
Si tratta di uno script scaricabile liberamente che non è nient altro che una classe php che si occupa di mandare mail.
Allora che differenza c’è con la funzione mail() integrata in php?
Con phpmailer è possibile impostare i propri server smtp per l’invio, gli header vengono impostati automaticamente e altre cose.
Raccomando l’uso di questo script soprattutto a chi utilizza hosting condivisi o VPS, in quanto usando la funzione mail() non è possibile impostare il server smtp associato al proprio dominio, cosi nell’header della mail che inviamo non sarà presente la firma del nostro smtp ma solamente quella del nostro provider e questo da molti filtri anti-spam viene visto come spam.
La motivazione è semplice; supponendo che il nostro dominio sia www.miosito.com quando un filtro anti-spam andrà a fare i dovuti controlli sulla nostra mail risulterà che il (i) server smtp attraverso cui la nostra mail è passata non sono associati al dominio miosito.com.
Questo è ovviamente un controllo fondamentale per verificare l’autenticità di una mail, altrimenti chiunque potrebbe mandare mail a nostro nome dal proprio sito.
Vediamo ora come utilizzare la classe phpmailer per mandare le nostre mail.
Prima cosa scarichiamo lo script da qua, scompattiamolo e carichiamolo sul nostro server.
Da ora in poi nella pagina in cui mandate le mail dovete ricordarvi di includere questo pezzo di codice
require_once("class.phpmailer.php");
ovviamente tra virgolette va messo il percorso in cui si trova il file class.phpmailer.php.
Adesso diamo un occhio al codice da usare per impostare la mail
$mail = new PHPMailer();
istanziamo una nuova classe PHPmailer
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = "indirizzo_server_smtp";
$mail->Port = 25;
$mail->Username = "username_server_smtp";
$mail->Password = "password_server_smpt";
con questo spezzone di codice in sequenza
- abilitiamo l’uso di un server SMTP esterno
- abilitiamo l’autenticazione sul server SMTP (questo non è obbligatorio, dipende dalle impostazione del vostro SMTP)
- impostiamo l’host del server SMTP (es. smtp.miosito.com)
- impostiamo la porta (solitamente è la 25, dipende se inviate le mail cifrate o no)
- impostiamo username e password per l’autenticazione sul server SMTP
$mail->From = "indirizzo_mail_del_mittente";
$mail->FromName = "nome_visualizzato_dal_client_di_posta";
$mail->AddAddress("indirizzo_mail_destinatario");
$mail->AddReplyTo('indirizzo_email_per_le_risposte', 'Nome visualizzato');
$mail->WordWrap = 60; // a capo dopo 60 caratteri
$mail->IsHTML(true); // invio mail in formato HTML
Penso che lo spezzone qui sopra si spieghi da solo.
Infine impostiamo oggetto e messaggio della mail
$mail->Subject = "oggetto_mail";
$mail->Body = "contenuto della mail";
Ora per inviare la mail sarà sufficiente usare
$mail->Send();
Send() è una funzione booleana che ritorna TRUE se la mail viene inviata correttamente o FALSE in caso contrario.
Phpmailer dispone di molte altre funzioni, ad esempio con
$mail->AddAttachment("indirizzo_del_file_da_includere");
possiamo facilmente includere un allegato alla mail, oppure
$mail->AltBody = "Messaggio non in HTML";
Possiamo impostare una versione solo testuale della nostra mail per fare in modo che chi usa un client che non supporta l’html possa visualizzare comunque la mail.
Quest’ultimo comando è utile soprattutto perchè molti filtri anti-spam controllano anche se la mail html possiede anche una versione non-html, in quanto il possederla o meno aumenta la “qualità” e la “serietà” della mail.
Infine un ultimo consiglio che mi sento di dare è quello di cambiare la codifica che phpmailer usa di default, in quanto questo dovrebbe assicurarci (almeno in teoria) che alcuni caratteri vengano visualizzati correttamente su qualsiasi client.
Aprite quindi il file class.phpmailer.php, cercate lo spezzone di codice
public $CharSet= 'iso-8859-1';
e modificatelo in
public $CharSet= 'utf-8';
Ovviamente questo è un suggerimento, dovete essere voi a sapere quale codifica utilizzare, ma solitamente viene utilizzata la utf-8 che dovrebbe assicurare la perfetta leggibilità ovunque.
A questo punto non mi resta che augurarvi buon invio (e non fate spam)