Home / Programmazione / PHP / Inviare email con PHP
Mattepuffo

Inviare email con PHP

Inviare email con PHP

Per l'invio di email da PHP abbiamo solo l'imbarazzo della scelta in quanto a librerie.

Io mi trovo molto bene con PHPMailer.

Qua vediamo come inviare email in maniera multipla.

Scaricate la libreria (un singolo file php) e mettetela in una directory.

La sostanza è questa:

  • in home page carichiamo tutti gli utenti che stanno nel database
  • abbiamo una colonna checkbox per selezionare gli utenti
  • abbiamo un form che prende tutte le email selezionate

La pagina nel complesso è questa:

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['send'])) {
    $check = $_POST['check'];
    require_once 'lib/phpmailer.inc.php';
    $mail = new phpmailer();
    $mail->From = 'ChiaraBaschieri.it';
    $mail->FromName = "ChiaraBascheri.it";
    $mail->Subject = $_POST['subject'];
    $mail->Body = $_POST['messaggio'];
    foreach ($check as $send) {
        $mail->AddAddress($send);
    }
    $mail->Send();
    echo 'Mail inviata correttamente<br/>';
}
?>
<form action="" method="post" name="send_email" onsubmit="return validaEmail();">
    <table>
        <tr>
            <td>Titolo:</td>
            <td><input type="text" name="nome" id="titolo" value="" /></td>
        </tr>
        <tr>
            <td>Subject:</td>
            <td><input type="text" name="subject" id="subject" value="" /></td>
        </tr>
        <tr>
            <td>Messaggio:</td>
            <td><textarea name="messaggio" rows="8" cols="30"></textarea>
            </td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit" name="send" /></td>
            <td></td>
        </tr>
    </table>
    <br/><br/>
    <?php
    echo '<div id="demo">';
    echo '<table id="example" class="display"><thead>';
    echo '<th><a href="javascript:selectAll();">Select All</a></th>';
    echo '<th>NOME</th>';
    echo '<th>COGNOME</th>';
    echo '<th>EMAIL</th>';
    echo '<th>SETTORE</th>';
    echo '<th>STATO</th>';
    echo '<th></th></thead>';
    echo '<tfoot>';
    echo '<th><a href="javascript:selectAll();">Select All</a></th>';
    echo '<th>NOME</th>';
    echo '<th>COGNOME</th>';
    echo '<th>EMAIL</th>';
    echo '<th>SETTORE</th>';
    echo '<th>ATTIVATO</th>';
    echo '<th></th></tfoot>';
    foreach (showUtenti() as $row) {
        echo '<tr><td><input type="checkbox" name="check[]" value="' . $row['utente_email'] . '" /></td>';
        echo '<td>' . $row['utente_nome'] . '</td>';
        echo '<td>' . $row['utente_cognome'] . '</td>';
        echo '<td>' . $row['utente_email'] . '</td>';
        echo '<td>' . $row['settore'] . '</td>';
    }
    echo '</table></div>';
    ?>
</form>


Parecchia roba insomma.

Partiamo dalla tabella.

showUtenti() è una semplice funzione che esegue la query con PDO e riporta un array.

Nella pagina richiamiamo la funzione per creare una table con i vari dati.

L'importante è la colonna checkbox:

echo '<tr><td><input type="checkbox" name="check[]" value="' . $row['utente_email'] . '" /></td>';

Il nome deve avere le parentesi quadre, e come valore gli mettiamo le email degli utenti.

Com vedete il form finisce proprio sotto la tabella in modo da prendere in considerazione tutte le email selezionate.

In alto nella pagina abbiamo questo snippet:

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['send'])) {
        $check = $_POST['check'];
        require_once 'lib/phpmailer.inc.php';
        $mail = new phpmailer();
        $mail->From = 'mail@mail.it';
        $mail->FromName = "miosito.it";
        $mail->Subject = $_POST['subject'];
        $mail->Body = $_POST['messaggio'];
        foreach ($check as $send) {
            $mail->AddAddress($send);
        }
        $mail->Send();
        echo 'Mail inviata correttamente<br/>';
    }
}
?>

Il tutto parte quando abbiamo fatto il submit del form.

Impostiamo una variabile $check che prenderà i dati delle checkbox in POST.

Includiamo la libreria, creiamo un oggetto phpmailer() e impostiamo le varie opzioni.

Nel From e nel FromName possiamo metterci quello che vogliamo in questo caso; è buona norma specificare bene da dove proviene la mail però.

La cosa importante è il ciclo foreach: in pratica gli diciamo che per ogni $check trovato deve aggiungere un address a cui inviare la mail.

Infine facciamo il send.

Sicuramente la soluzione non è delle più eleganti, ma funziona.