Corso PHP Parte 15
La funzione mail() di PHP per inviare mail mail(to,subject,message,headers,parameters) prevede cinque argomenti tre dei quali obbligatori: l indirizzo o gli indirizzi dei destinatari (separati da virgola), l oggetto del messaggio, il testo del messaggio. perché l'invio venga effettuato è necessario disporre di un mail server, l'indirizzo di questo deve essere indicato nelle impostazioni di PHP. Eseguire phpinfo() per verificare; <?php mail( destinatario@dominio.it, oggetto del messaggio, testo del messaggio );?>
L'intestazione: quarto argomento della funzione mail() Ogni e-mail è costituita da due sezioni: intestazioni e messaggio. Tali sezioni per essere distinguibili sono separate da una linea vuota. Ogni intestazione è caratterizzata da un nome seguito da un valore. Ecco un esempio di alcune possibili intestazioni: To: Ricevente <ricevente@dominio.it> From: Inviante <inviante@dominio.org> CC: Altro Ricevente <altroricevente@dominio.net> Bcc: Ricevente Nascosto <nascosto@dominio.com> X-Mailer: Il nostro Php Alcune intestazioni sono standardizzate (To, From, CC, Bcc, ecc.) altre invece non lo sono ed iniziano per X-, come X-Mailer, che ci permette di indicare il programma utilizzato per l invio del messaggio. <?php $header = To: Ricevente <ricevente@dominio.it>\n ; $header.= From: Inviante <inviante@dominio.org>\n ; $header.= CC: Altro Ricevente <altroricevente@dominio.net>\n ; $header.= Bcc: Ricevente Nascosto <nascosto@dominio.net>\n ; $header.= X Mailer: Il nostro Php\n\n ; $oggetto = oggetto del messaggio ; $messaggio = testo del messaggio vero e proprio ; mail( ricevente@dominio.it,$oggetto,$messaggio,$header);?> I caratteri "\r\n" sono necessari per una buona scrittura dell'intestazione del messaggio da inviare. Non bisogna mai ometterli quando si aggiungono comando all'intestazione.
Formati di email Per poter inviare email in formato HTML, gif o altro dobbiamo aggiungere all'header delle informazioni particolari: 1) MIME-Version che permette di specificare la versione dello standard MIME. 2) Content-Type che specifica il contenuto del messaggio che potrebbe essere testo puro (text/plain ) che è il tipo di default, o HTML (text/html), o un immagine GIF (image/gif) o altro ancora. 3) Content-Transfer-Encoding che è la codifica con cui viene trasmesso il contenuto.
Email in formato HTML <?php $header = "MIME Version: 1.0\r\n"; $header.= "Content type: text/html; charset=iso 8859 1\r\n"; $header.= 'From: "Il mio nome" <io@mioserver.it> \r\n'; $header.= "Reply to: collega@mioserver.it\r\n"; $destinatario = "destinatario@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; fontweight: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);?>
Compatibilità Ma alcuni client di posta elettronica visualizzano le mail solo in formato testo. Per evitare incompatibilità è necessario predisporre due versioni del messaggio, una testo puro ed una HTML. Occorre utilizzare un Content-Type multipart/alternative. Per permettere al client di posta di distinguere l una dall altra le due parti del messaggio è necessario ricorrere ad un separatore. Tale separatore consiste in una stringa arbitraria chiamata Boundary. La stringa deve essere unica all interno del messaggio, non deve confondersi con porzioni del testo: conviene generarla in modo pseudocasuale, ad es. utilizzando funzione md5(). Essa deve inoltre iniziare con due trattini. La medesima stringa deve essere usata come terminatore dell e-mail ed in questo caso, oltre ad essere preceduta dai due trattini, deve essere terminata con i due trattini. In modo analogo si procede per gli altri formati. Per esempi e approfondimenti vedi http://www.html.it/articoli/e-mail-in-formato-html-con-php-1/ e pagine successive