back to top

Spedire e-mail con PHP: la funzione mail()

Inviare e-mail con PHP è un’operazione abbastanza semplice: per spedire un messaggio di posta elettronica dalle pagine del nostro sito web, infatti, è sufficiente richiamare la funzione mail() la quale consente, appunto, di inviare email con codifica MIME.

La funzione mail(), una volta richiamata all’interno della nostra applicazione PHP, "contatterà" il sistema postale del nostro server (sendmail o server SMTP) intimandogli di spedire una mail con le caratteristiche definite dallo sviluppatore. Ovviamente, nel caso in cui il nostro server non sia attrezzato di un sistema di spedizione attivo e funzionante (ad esempio perchè il componente è stato bloccato o la porta chiusa) la funzione mail() restituirà FALSE (restituirà TRUE in caso di successo).

Inviare una semplice mail con PHP

Questa la sintassi di base della funzione mail() di PHP:

mail($destinatario, $oggetto, $messaggio)

Solitamente, tuttavia, si utilizza anche un quarto parametro (facoltativo) per passare alla funzione i cosidetti headers. Senza questo quarto parametro, infatti, le mail verrebbero spedite indicando come mittenere l’indirizzo di default del server con problemi sia dal punto di vista della deliverability (i messaggi potrebbero essere identificati come spam) che pratici (eventuali reply non andrebbero a buon fine).

La sintassi completa della nostra funzione mail(), quindi, è la seguente:

mail($destinatario, $oggetto, $messaggio, $headers)

Ecco un picolo esempio di codice PHP per l’invio di una semplice e-mail di testo:

<?php
// definisco mittente e destinatario della mail
$nome_mittente = "Mio Nome";
$mail_mittente = "mittente@sito.com";
$mail_destinatario = "destinatario@sito.com";

// definisco il subject ed il body della mail
$mail_oggetto = "Messaggio di prova";
$mail_corpo = "Questo è un messaggio di prova per testare la mia applicazione";

// aggiusto un po' le intestazioni della mail
// E' in questa sezione che deve essere definito il mittente (From)
// ed altri eventuali valori come Cc, Bcc, ReplyTo e X-Mailer
$mail_headers = "From: " .  $nome_mittente . " <" .  $mail_mittente . ">\r\n";
$mail_headers .= "Reply-To: " .  $mail_mittente . "\r\n";
$mail_headers .= "X-Mailer: PHP/" . phpversion();

if (mail($mail_destinatario, $mail_oggetto, $mail_corpo, $mail_headers))
  echo "Messaggio inviato con successo a " . $mail_destinatario;
else
  echo "Errore. Nessun messaggio inviato.";
?>

Gli headers

Abbiamo visto che gli headers contengono una serie di informazioni supplementari. Nel nostro esempio:

  • nome ed indirizzo email del mittente;
  • indirizzo reply-to (rispondi a…) che nel nostro caso corrisponde al mittente (ma nulla vieta che sia un indirizzo differente);
  • strumento utilizzato pr la spedizione (X-Mailer).

Si noti che tutte queste informazioni sono separate da dei ritorni a capo fisici ("\r\n") che non possono essere omessi.

Inviare una mail in HTML con PHP

Volendo è anche possibile spedire mail con formattazione HTML (nell’esempio visto sopra si trattava di una semplice mail plain text). Per inviare una mail in HTML utilizzando la funzione mail() di PHP sarà sufficiente modificare il codice visto sopra in questo modo:

<?php
// definisco mittente e destinatario della mail
$nome_mittente = "Mio Nome";
$mail_mittente = "mittente@sito.com";
$mail_destinatario = "destinatario@sito.com";

// definisco il subject
$mail_oggetto = "Messaggio di prova";

// definisco il messaggio formattato in HTML
$mail_corpo = <<<HTML
<html>
<head>
  <title>Una semplice mail con PHP formattata in HTML</title>
</head>
<body>
Questo è un messaggio di prova l'<b>invio di mail in HTML</b> con la funzione mail() di PHP
</body>
</html>
HTML;

// aggiusto un po' le intestazioni della mail
// E' in questa sezione che deve essere definito il mittente (From)
// ed altri eventuali valori come Cc, Bcc, ReplyTo e X-Mailer
$mail_headers = "From: " .  $nome_mittente . " <" .  $mail_mittente . ">\r\n";
$mail_headers .= "Reply-To: " .  $mail_mittente . "\r\n";
$mail_headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";

// Aggiungo alle intestazioni della mail la definizione di MIME-Version,
// Content-type e charset (necessarie per i contenuti in HTML)
$mail_headers .= "MIME-Version: 1.0\r\n";
$mail_headers .= "Content-type: text/html; charset=iso-8859-1";

if (mail($mail_destinatario, $mail_oggetto, $mail_corpo, $mail_headers))
  echo "Messaggio inviato con successo a " . $mail_destinatario;
else
  echo "Errore. Nessun messaggio inviato.";
?>

Come avrete notato il codice non è molto differente da quello visto in precedenza, le uniche differenze sono:

  • il corpo del messaggio è formattato in HTML;
  • negli headers abbiamo aggiunto l’indicazione della MIME-Version, del Content-type (text/html) e del charset.

Conclusioni

Ovviamente è possibile personalizzare i codici qui proposti nel modo che si ritiene più opportuno e sfruttare la funzione mail() di PHP per i più svariati utilizzi. Con qualche piccolo accorgimento, infatti, potrete creare facilmente applicazioni molto interessanti come, ad esempio, un formmail oppure un sistema per l’invio di notifiche automatiche.

Approfondimenti:

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).