In rete ci sono molte guide per spedire e-mail in HTML e non tramite PHP e la sua funzione mail().
Sfortunatamente bisogna prestare molta attenzione a come si compongono, è facile infatti incorrere a molti problemi di compatibilità, specialmente con Client di posta come Outlook e WebMail come Libero.it.
Il problema sta nel fatto che molti programmi o interfacce Web sono molto esigenti in fatto di Content-Type… e se non volete impazzire con Immagini incluse o esterne, allegati e multipart/related o alternative, vi consigliamo di leggere quanto segue.
- Scaricate le librerie PHPMailer per la versione di PHP 5 o 6 sul sito ufficiale: http://phpmailer.worxware.com
- Decomprimete il file ZIP e caricate la cartella phpmailer sul vostro server
- Tutto quello che dovete fare è inserire il seguente codice, ogni volta che dovete inviare un’e-mail:
require_once(‘phpmailer/class.phpmailer.php’);//caricarlo una sola volta nello script (poi potete inviare infinite email)//Dichiaro la classe PHPMailer$mail = new PHPMailer(true);$mail->IsSMTP(true);//Uso l’autenticazione SMTP$mail->IsHTML(true);//Dichiaro che è un’e-mail HTML$mail->CharSet = ‘UTF-8′;//Set di Caratteri$mail->Host = “smtp.miosito.com”;//Server SMTP$mail->SMTPDebug = 0;//Informazioni per il DEBUG (1=solo errori, 2=tutti i messaggi, 0=niente)$mail->SMTPAuth = true;//Abilito l’autenticazione SMTP$mail->Port = 25;//Porta SMTP (25)$mail->Username = “postmaster@miosito.com”;//Account SMTP (deve essere una casella attiva e funzionante sul server, altrimenti potrà essere considerata SPAM)$mail->Password = “miapassword”;//Password SMTP$mail->AddReplyTo($email_reply, $nome_reply);//risposta a…$mail->Priority = 3;//priorità$mail->AddAddress($email_dest);//destinatario$mail->SetFrom($email_mitt, $nome_mitt);//mittente
- Ecco alcune varianti:$mail->AddCC($dest_conoscenza);//aggiungo un destinatario come Copia Conoscenza
$mail->AddBCC($dest_nascosto);//aggiungo un destinatario come Copia Conoscenza Nascosta
$mail->ConfirmReadingTo = $notificationemail;//indirizzo per la conferma di lettura (se richiesta, altrimenti non dichiararlaNOTA: potete benissimo intuire che, se si dovesse spedire un gran numero di e-mail (sistema di Newsletter), la funzione AddBCC risulta molto comoda se inserita all’interno di un ciclo for. - Passiamo adesso alla compilazione del corpo dell’e-mail:
per quanto mi riguarda io preferisco avere un template HTML dove inserisco il testo fisso e delle variabili fittizze (p.e. var_nome) che poi andrò a sostituire con i valori corretti o le immagini dell’e-mail.
Supponiamo di aver creato un template del genere con una Tabella al suo interno, che ospiterà le immagini e il testo.Nello script PHP avrò quindi:$template_file = “template.html”;
$file = fopen($template_file, ‘r’);
if ($file !== NULL) {
$contents = fread($file, filesize($template_file));
$contents = eregi_replace(“var_mail_messaggio”, $messaggio, $contents);
$contents = eregi_replace(“var_mail_allegati”, $allegati, $contents);
$contents = eregi_replace(“var_mail_data”, date(“d/m/Y”,time()), $contents);
$contents = eregi_replace(“var_mail_ora”, date(“H:i”,time()), $contents);
$contents = eregi_replace(“var_mail_Htitle”, ‘<img src=”cid:Htitle” width=”650″ height=”40″ alt=”header” />’, $contents);//inserisco l’immagine in alto
$contents = eregi_replace(“var_mail_bottom”, ‘<img src=”cid:bottom” width=”650″ height=”10″ alt=”bottom” />’, $contents);//inserisco l’immagine in basso
//Messaggio alternativo nel caso in cui il destinatario non possa vedere il formato HTML
$Alternative = “$messaggio\n\n”;
}
fclose($file); - Adesso imposto gli ultimi parametri e invio l’email:$mail->Subject = $oggetto;//oggetto del messaggio
$mail->AltBody = $Alternative; //includo il messaggio per chi non può visualizzare il formato HTML
$mail->Body = $contents;//inserisco il contenuto nel Body
$mail->AddEmbeddedImage(‘header.jpg’, ‘Htitle’, ‘header.jpg’);//aggiungo le immagini inline: filename, cid, name
$mail->AddEmbeddedImage(‘bottom.jpg’, ‘bottom’, ‘bottom.jpg’);//aggiungo le immagini inline: filename, cid, name
if($mail->Send()) {
echo “ok”;
} else {
echo “errore”;
}
NOTE IMPORTANTI:
Ci sono alcune cose da tener presente per quanto riguarda la costruzione dell’e-mail HTML.
Se volete scegliere stili di testo, colori e altro (con i CSS) dovete osservare le seguenti regole per assicurarvi la compatibilità con tutti i client di posta.
- Usare CSS inline per il testo e i link (ovvero senza servirsi di documenti .css esterni o caricati sul server): inserire gli stili CSS direttamente nel corpo dell’email (o del template).
- Outlook non riconosce gli sfondi nelle tabelle perciò usate solo tinte unite tramite l’attributo bgcolor dei CSS.
- Usate solo Tabelle e non elementi DIV. Per me come per altri programmatori/web designer sarà un mezzo insulto, ma purtroppo la nostra cara Microsoft scansa accuratamente i DIV e le E-mail vanno costruite con le Tabelle.
- Per gli attributi di stile delle tabelle usatele inline anche queste ovvero direttamente nel TAG TABLE (p.e. <TR style=”……”>”.
- Usate le immagini JPEG (scordatevi la trasparenza dei PNG)
Buona fortuna e non dimenticate di provare la ricezione delle e-mail con più Client di posta e WebMail possibili… se state sviluppando una Web Application dovrete investire un po’ di tempo anche in questo!