Eccoci di fronte ad un argomento molto interessante e molto discusso. Spesso ci si ritrova a dover sviluppare applicazioni che necessitano di inviare email ad alcuni indirizzi di posta, siano queste per motivi pubblicitari, per motivi di sicurezza o per motivi di segnalazione.
Come la maggior parte delle altre operazioni eseguibili da PHP che hanno a che vedere con applicazioni o librerie esterne, anche l'invio delle mail necessita di una corretta impostazione del file php.ini. La funzione mail()
, quella utilizzata per inviare qualunque tipo di email (sia testuale, sia HTML, sia con allegati) utilizzerà il server SMTP specificato nel file di configurazione. Quindi è importante impostare un indirizzo corretto, oppure il sistema non funzionerà e non sarà possibile eseguire correttamente i nostri script.
La funzione mail ha una struttura molto semplice che descriverò tra breve. Purtroppo però è una funzione a basso livello, che necessita di una conoscenza completa dello standard MIME per essere utilizzata correttamente. Lo standard MIME permette di definire messaggi formati da parti aventi tipologie di contenuto differente, quali, nel nostro caso, porzioni testuali, porzioni in HTML e file allegati.
La funzione mail accetta quattro parametri:
- il primo parametro indica l'indirizzo di posta del destinatario;
- il secondo l'oggetto della mail;
- il terzo il testo del messaggio;
- il quarto è opzionale ma è quello più potente: permette di specificare manualmente gli header del messaggio al fine di configurarlo correttamente per le nostre esigenze.
Normalmente l'invio di una mail testuale nel quale si desidera specificare anche il destinatario viene effettuato con questa breve riga di codice:
mail("g.farina@html.it", "mesaggio di prova", "Questo è un messaggio di prova testuale", "From: test@html.it");
Questa chiamata a funzione restituirà un valore booleano rappresentante l'esito della chiamata a funzione, stamperà eventuali errori riscontrati durante l'invio (è sempre una buona idea far precedere la chiamata da una @ per evitare questo comportamento e non rovinare il layout della pagina in caso di errori) e, se tutto sarà andato per il verso giusto, invierà la mail.
La funzione mail non effettua alcuna validazione dei dati inseriti, quindi sarà opportuno che vengano specificati dei valori corretti o accettabili. Buona norma è quella di valutare la validità dell'indirizzo email di destinazione nel caso in cui sia specificato da un utente esterno attraverso un'espressione regolare:
$mail = $_POST['email'];
if(eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $mail))
{
//Invio la mail
}else
{
//restituisco un errore
}
Purtroppo questo sistema valida il formato della mail ma non la reale validità dell'indirizzo. Nel caso fosse necessario attestare la validità di questo, esistono sistemi che si connettono ai server SMTP della mail per sapere se l'indirizzo esiste o è fasullo.
Utilizzando la funzione mail()
è possibile inviare email anche in formato HTML:
mail("g.farina@html.it", "mesaggio di prova", "Questo è un <b>messaggio</b> di prova testuale", "MIME-Version: 1.0rnContent-type: text/html; charset=iso-8859-1rnF
rom: test@html.it");
Ogni riga dell'intestazione deve essere separata da rn
rispetto alla precedente. Dobbiamo anche assicurarci che nel messaggio siano contenuti solo n
, in modo da evitare spiacevoli inconvenienti.
L'aggiunta di allegati al messaggio è un processo leggermente più complesso che necessita della comprensione delle specifiche MIME. Dato che il discorso rischierebbe di diventare pesante e noioso, consiglio a tutti di iniziare utilizzando qualcuna delle centinaia di librerie presenti su internet che svolgono questi compiti, e di lasciarsi qualche ora libera per studiarsi la reference delle specifiche mime ed implementare una propria versione del sistema.