La funzione PHP con cui inviare email si chiama mail()
, il più semplice esempio d'invio è:
mail('email@destinatario.it', 'oggetto della mail', 'contenuto del messaggio');
Con tre semplici parametri possiamo inviare una mail con oggetto e contenuto ad un destinatario. Questa la mail che arriverà al nostro destinatario:
La firma della funzione è la seguente:
mail($to, $subject, $message, $headers, $parameters);
La funzione restituisce un booleano che indica se l'invio è andato a buon fine o meno. Non è tutto qui, però. Vediamo quali sono tutte le opportunità che ci mette a disposizione la funzione mail()
.
Inviare email a destinatari multipli
Il parametro $to
può essere una stringa con un solo destinatario oppure più destinatari separati da virgola. Avendo la necessità di inviare la stessa email a diversi destinatari, quindi, il codice è il seguente:
$receivers = implode(' ,', [
'Mario Rossi <info@destinatario1.it>',
'Luca Bianchi <info@destinatario2.it>',
]);
mail($receivers, 'oggetto della mail', 'contenuto del messaggio');
Possiamo notare che i destinatari non sono solo indirizzi email, questo perché il campo $to
è compatibile con lo standard RFC 2822 e quindi supporta i seguenti formati:
- user@example.com
- user@example.com, anotheruser@example.com
- User <a href="mailto:user@example.com">user@example.com</a>
- User <a href="mailto:user@example.com">user@example.com</a>, Another User <a href="mailto:anotheruser@example.com">anotheruser@example.com</a>
Il risultato dell'invio sarà:
Aggiugere destinatario in copia conoscenza nascosta
Inviare una mail a più destinatari potrebbe avere i suoi svantaggi, se volessimo impostare uno o più CCN (copia conoscenza nascosta) possiamo definire un header come nel seguente esempio:
$headers[] = 'Bcc: dymissy86@gmail.com';
mail('email@destinatario1.it', 'oggetto della mail', 'contenuto del messaggio', implode("\r\n", $headers));
Inviare email in HTML
I due esempi che abbiamo appena visto inviano la mail in formato testo. Questo vuol dire che non è possibile personalizzare il markup della mail. Per abilitare il supporto all'HTML abbiamo bisogno di impostare il content-type adatto:
$message = '
<html>
<head>
<title>Benvenuto</title>
</head>
<body>
<h1>Benvenuto sul sito</h1>
<p>La registrazione è stata effettuata con successo.</p>
</body>
</html>
';
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8';
mail('email@destinatario1.it', 'Benvenuto sul sito', $message, implode("\r\n", $headers));
Inviare una mail da un form di contatto
Vediamo un esempio pratico di come utilizzare le informazioni viste finora creando un form di contatto. Iniziamo dal codice HTML necessario:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Contact Form</title>
</head>
<body>
<form action="send.php" method="post">
<input type="text" name="name" placeholder="Il tuo nome completo" /><br>
<input type="email" name="email" placeholder="Il tuo indirizzo email" /><br>
<input type="subject" name="subject" placeholder="Oggetto" /><br>
<textarea name="message" rows="8" cols="80" placeholder="Il tuo messaggio"></textarea><br>
<input type="submit" />
</form>
</body>
</html>
A questo punto andiamo a creare il file send.php
che si occuperà di inviare una mail di conferma all'utente e una mail con i contenuti inseriti dall'utente a noi:
<?php
$adminEmail = 'admin@admin.com';
$userEmail = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$userMessage = '
<html>
<head>
<title>Grazie per averci contattato</title>
</head>
<body>
<h1>Grazie per averci contattato</h1>
<p>La tua richiesta è stata inoltrata. Ti risponderemo al più presto.</p>
<p>Lo Staff</p>
</body>
</html>
';
$adminMessage = "
<html>
<head>
<title>Contatto dal sito web</title>
</head>
<body>
<h1>Contatto dal sito web</h1>
<ul>
<li>Nome: {$_POST['name']}</li>
<li>Oggetto: {$_POST['subject']}</li>
<li>Messaggio: {$_POST['message']}</li>
</ul>
</body>
</html>
";
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8';
mail($userEmail, 'Richiesta di contatto effettuata con successo', $userMessage, implode("\r\n", $headers));
mail($adminEmail, 'Richiesta di contatto dal sito web', $adminMessage, implode("\r\n", $headers));
echo "Messaggio inviato con successo";