Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 46 di 67
  • livello intermedio
Indice lezioni

Inviare email con PHP

Scopriamo come inviare email con la funzione mail() di PHP, anche in formato HTML.
Scopriamo come inviare email con la funzione mail() di PHP, anche in formato HTML.
Link copiato negli appunti

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:

Figura 1. Invio della mail.
Invio della mail

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à:

Figura 2. Invio della mail a destinatari multipli.
Invio della mail a destinatari multipli

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));

Figura 3. Invio della mail HTML a destinatari multipli.
Invio della mail HTML a destinatari multipli

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";

Ti consigliamo anche