Nella seconda parte del tutorial dedicato alla funzione mail() di PHP approfondiremo un argomento piuttosto dibattuto e non sempre semplice per chi è alle prime armi: come inviare email tramite mail() in formato HTML. Inviare email HTML vuol dire poter aggiungere ad una email immagini ed elementi multimediali come addirittura animazioni in flash.
Per poter inviare email in formato HTML dobbiamo aggiungere all’header del nostro messaggio due intestazioni particolari. Consideriamo lo stesso messaggio che avevamo creato nella prima parte di queto tutorial e modifichiamo il codice aggiungendo queste due intestazioni:
<?php
$header = "MIME-Version: 1.0rn";
$header .= "Content-type: text/html; charset=iso-8859-1rn";
$header .= 'From: "Il mio nome" <io@mioserver.it> rn';
$header .= "Reply-to: collega@mioserver.itrn";
$destinatario = "bob@server.com";
$oggetto = "email di prova";
$messaggio = "Ecco la mia prima email";
mail($destinatario, $oggetto, $messaggio, $header);
?>
La prima intestazione che abbiamo aggiunto è la "MIME-Version:", che specifica la versione della codifica MIME che verrà utilizzata nel messaggio, in questo caso la 1.0. La seconda instestazione è invece formata dal "Content-type:", che specifica il tipo di dati contenuti nel messaggio, in questo caso "text/html" significa che si tratta di testo da decodificare come HTML, e dal "charset=" ovvero lo standard set di caratteri utilizzati nel messaggio. Lo standard "ISO-8859-1" è lo standard del web e può essere considerato come una costante. Senza queste intestazioni il client di posta elettonica non riconoscerebbe che si tratta di un messaggio in formato HTML, e visualizzerebbe il codice come semplice testo.
Fatto ciò è possibile inserire nel testo del messaggio qualsiasi tipo di oggetto, purchè questo sia supportato da HTML. In pratica, tutto ciò che potete mettere in una pagina web potete metterlo anche in una email in formato HTML.
Bisogna però ricordare di utilizzare alcuni accorgimenti:
- il testo deve essere codificato esattamente come una comune pagina html, ovvero con i tag <html>…</html> di apertura e chiusura e con al loro interno i tag <head>…</head> e <body>…</body>.
- tutti i contenuti multimediali, come ad esempio le immagini, devono essere riferite con il loro percorso assoluto al server web, ovvero con il percorso del tipo "http://www.server.com/immagine.gif". Ciò è necessario perchè se ci riferiamo agli oggetti con percorsi relativi si richiede che l’utente disponga di tali oggetti sul proprio pc, e ciò non è possibile. Precisiamo che c’è un modo diverso e più complesso per includere le immagini nel messaggio email, ma in questa parte di tutorial non lo trattiamo.
- è possibile utilizzare i fogli di stile (CSS) purchè questi non siano richiamati dall’esterno ma siano inclusi nei tag <head> del codice HTML. Se proprio sul vuole richiamare un CSS esterno bisogna farlo con percorso assoluto, come per tutti gli altri oggetti.
Vediamo quindi in pratica come possiamo modificare il codice precedente utilizzando però codice HTML e aggiungendo anche un’immagine:
<?php
$header = "MIME-Version: 1.0rn";
$header .= "Content-type: text/html; charset=iso-8859-1rn";
$header .= 'From: "Il mio nome" <io@mioserver.it> rn';
$header .= "Reply-to: collega@mioserver.itrn";
$destinatario = "bob@server.com";
$oggetto = "email di prova in HTML ";
$messaggio = '
<html>
<head>
<title>La mia email HTML</title>
<style type="text/css">
body {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; font-weight:normal; color:#000000;}
</style>
</head>
<body>
<p>Ecco la mia prima mail in HTML.<br>
Questo testo è in <strong>bold</strong></p>
<p>E qui ci metto una immagine: <img src="http://www.server.com/immagini/mail.gif"></p>
</body>
</html>
';
mail($destinatario, $oggetto, $messaggio, $header);
?>