Torniamo ad occuparci di PHP, con un script davvero interressante. Attraverso il codice che vedremo, infatti, sarà possibile scrivere delle classi che potranno mandare mail in formato HTML, con all’interno del corpo del messaggio immagini, o immagini e testo.
Quello che vedremo è il cuore del codice che si occupa di configurare la mai e di procedere successivamente all’invio. Il codice è il seguente:
$header = “From: Mittente <mittente@mittente.com>\n”;
$header .= “X-Mailer: il nostro script\n”;
$boundary = “==String_Boundary_x” .md5(time()). “x”;
$boundary2 = “==String_Boundary2_y” .md5(time()). “y”;
$header .= “MIME-Version: 1.0\n”;
$header .= “Content-Type: multipart/related;\n”;
$header .= ” type=\”multipart/alternative\”;\n”;
$header .= ” boundary=\”$boundary\”;\n\n”;
$messaggio = “Se visualizzi il seguente messaggio il tuo programma non supporta i MIME\n\n”;
$messaggio .= “–$boundary\n”;
$messaggio .= “Content-Type: multipart/alternative;\n”;
$messaggio .= ” boundary=\”$boundary2\”;\n\n”;
$messaggio .= “–$boundary2\n”;
$messaggio .= “Content-Type: text/plain; charset=\”iso-8859-1\”\n”;
$messaggio .= “Content-Transfer-Encoding: 7bit\n\n”;
$messaggio .= “Messaggio alternativo in formato testo.\n\n”;
$messaggio .= “–$boundary2\n”;
$messaggio .= “Content-Type: text/html; charset=\”iso-8859-1\”\n”;
$messaggio .= “Content-Transfer-Encoding: 7bit\n\n”;
$messaggio .= “<html><body><p>Questo messaggio è in formato <strong>html</strong> ma ha una parte testuale insieme ad una immagine.</p><p>Sito <a href=\”http://www.blogrammazione.it\”>www.blogrammazione.it</a><img src=\”cid:MiaImmagine123\”></p></body></html>\n”;
$messaggio .= “–$boundary2–\n”;
$messaggio .= “–$boundary\n”;
$messaggio .= “Content-ID: <MiaImmagine123>\n”;
$messaggio .= “Content-Type: image/jpeg\n”;
$messaggio .= “Content-Transfer-Encoding: base64\n\n”;
$allegato = “immagine.jpg”;
$file = fopen($allegato,’rb’);
$data = fread($file,filesize($allegato));
fclose($file);
$data = chunk_split(base64_encode($data));
$messaggio .= “$data\n\n”;
// chiusura della sezione multipart/related
$messaggio .= “–$boundary–\n”;
$subject = “oggetto del messaggio alternativo con immagini inline”;
if( @mail(“ricevente@ricevente.it”, $subject, $messaggio, $header) ) echo “e-mail inviata con successo!”;
else echo “errore nell’invio dell’e-mail!”;
Per comodità, il codice sopra scritto è scaricabile come file .txt al seguente indirizzo. Procediamo con l’analisi dello script: dopo aver settato il mittente, creiamo due “boundary”. Queste “etichette” vengono utilizzate nell’intestazione del messaggio per separare le sezioni MIME che compongono il corpo della mail: nel nostro esempio, avremo una sezione di testo visibile solo nel caso in cui il proprio client di posta non supporta il formato MIME, un’altra sezione per il testo della mail e una’altra ancora per l’immagine nel caso in cui il client invece supporti correttamente i formati MIME.
La gestione dell’mmagine avviene nelle seguenti righe di codice:
$messaggio .= “Content-ID: <MiaImmagine123>\n”;
$messaggio .= “Content-Type: image/jpeg\n”;
$messaggio .= “Content-Transfer-Encoding: base64\n\n”;
$allegato = “immagine.jpg”;
$file = fopen($allegato,’rb’);
$data = fread($file,filesize($allegato));
fclose($file);
$data = chunk_split(base64_encode($data));
$messaggio .= “$data\n\n”;
Nella prima riga dichiariamo l’id, il nome dell’etichetta che identifica la nostra immagine. La seconda e la tersa riga invece servono per specificare rispettivamente il formato dell’immagine e la codifica. Infatti per inserire l’immagine all’interno del corpo del messaggio, effettueremo una conversione base64, in questo modo evitiamo che venga inserita come semplice allegato e permettiamo al client di posta di visualizzare come parte del corpo della mail.
Le istruzioni successive non fanno altro che permettere la lettura dell’immagine come file ed effettuare la codifica vera e propria. L’ultima istruzione di questo segmento concatena la codifica base64 dell’immagine al corpo del messaggio.