Quando capita di dover lavorare con strutture che utilizzano per il desgin HTML file con l’estensione .tpl, siamo di fronte ad un bivio: correre veloce veloce verso la colonna portante del nostro ufficio con la testa in avanti finchè non sentiamo un tonfo, oppure impazzire perchè siamo obbligati a lavorare sostanzialmente con file di testo, quindi senza la possibilità di avere i tag di codice colorati per facilitarne il riconoscimento.

In realtà siamo stati un pò troppo precipitosi ;) : c’è un’altra soluzione, ed ha fornirla è chiaramente la IDE professionale e meravigliosa per lo sviluppo PHP, ovvero Zend Studio for Eclipse.

Questo ambiente di sviluppo, oltre a fornire infinite utilissime ed efficentissime funzionalità per il professionista, permette la personalizzazione e la gestione dell’editor: lo sviluppatore può quindi decidere come visualizzare alcuni tipi di file, permettendogli di lavorare più agevolmente anche nelle situazioni più critiche.

Se vogliamo salvare la nostra testolina, ma soprattutto la colonna portante del nostro ufficio, tutto ciò che dobbiamo fare per lavorare tranquillamente con file aventi estensione .tpl è seguire questi semplici e veloci passi:

1) nel menu, andare in Window->Preferences

2) nell Preferences, andare in General->Content Types

3) nella sezione Content Types, scegliere Text->PHP

4) Cliccare sul pulsante “Add”, ed inserire la stringa *.tpl

5) Cliccare sul pulsante “OK”

A questo punto, una volta riavviato il nostro ambiente di sviluppo, i file con estensione .tpl verranno visualizzati come normali file PHP: in questo modo sarà più semplice riconoscere i tag HTML dal codice PHP, rendendo il nostro lavoro più efficiente e comodo. Ovviamente non è obbligatorio scegliere la visualizzazione in PHP al passo 3) : ad esempio, chi preferisce, può associare i file .tpl alla visualizzazione HTML, a seconda delle proprie necessità.



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.