Come inviare e-mail con PHPMailer

PHPMailer è un framework che regola l’invio di e-mail tramite PHP. Questo tipo di trasmissione e-mail è utilizzato principalmente per i moduli di contatto sui siti web, ma è possibile anche l’invio di e-mail private.

Cos’è PHPMailer?

PHPMailer è una classe di posta elettronica per PHP, fornita dalla community. In contrasto con il comando e-mail, che è implementato su PHP dall’inizio, la probabilità che le e-mail inviate con PHPMailer finiscano nella cartella spam è molto più bassa, perché queste vengono inviate usando l’SMTP. Questo è il Simple Mail Transfer Protocol che viene utilizzato per inviare e-mail su Internet.

Per cosa si usa PHPMailer?

L’utilizzo di PHPMailer è un po’ più complicato rispetto all’uso di un provider o dei programmi di posta elettronica integrati nel computer. Una domanda legittima è quindi in quali contesti vale la pena utilizzare PHPMailer. L’utilizzo del framework PHP rende più facile la creazione di risposte automatiche, come quelle che si utilizzano quando si gestisce un negozio online. È anche ideale per i moduli di contatto sul vostro sito web.

Requisiti per usare PHPMailer

Per poter lavorare con PHPMailer, avrete innanzitutto bisogno di un server SMTP. Che usiate il server di posta elettronica di un provider o che impostiate un vostro serverpersonale dipende interamente da voi. Inoltre, si raccomanda un gestore di pacchetti per PHP come Composer per l’installazione e l’estensione di PHP.

Consiglio

Un altro prerequisito per utilizzare PHPMailer è la padronanza delle basi di PHP. Se ancora non avete molta dimestichezza con questo linguaggio, il nostro tutorial di PHP per principianti vi aiuterà!

Guida: installazione di PHPMailer

Primo passaggio: scaricare la versione attuale di PHPMailer

Scaricate l’ultima versione di PHPMailer. Il download può essere eseguito tramite il gestore di pacchetti o manualmente da GitHub.

Prima variante: download tramite Composer

Se avete installato il gestore di pacchetti Composer, usate semplicemente il comando seguente:

composer require phpmailer/phpmailer

Importante: se avete installato PHPMailer con Composer, dovete includere quest’ultimo nel vostro codice PHP per poter inviare e-mail.

Per farlo, inserite la seguente riga di codice:

require_once "vendor/autoload.php";

La parola chiave “require_once” assicura che Composer possa essere incluso una sola volta. Qualsiasi altra opzione potrebbe portare a un comportamento imprevedibile o a errori di programma. L’installazione con Composer è ora completata.

Seconda variante: download diretto da GitHub

I file sorgente di PHPMailer possono anche essere scaricati manualmente premendo il pulsante “Clone or download” nel corrispondente repository di GitHub.

Secondo passaggio: decomprimere i file

Se avete scaricato manualmente il codice sorgente di PHPMailer, dovete aprire il file ZIP. Per farlo, selezionate la posizione in cui volete installare PHPMailer. Di nuovo, dovete prima includere PHPMailer nel vostro script. Assumendo che abbiate decompresso i file PHPMailer in una directory chiamata PHPMailer, usate le seguenti righe di codice per farlo:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/* Classe per la gestione delle eccezioni e degli errori */
require 'C:\PHPMailer\src\Exception.php';
/* Classe PHPMailer */
require 'C:\PHPMailer\src\PHPMailer.php';
/* Classe SMTP, necessaria per stabilire la connessione con un server SMTP */
require 'C:\PHPMailer\src\SMTP.php';
$email = new PHPMailer(TRUE);

Guida: invio di e-mail con PHPMailer

Primo passaggio: integrare gli spazi dei nomi

Per accedere comodamente a PHPMailer, assicuratevi prima che gli spazi dei nomi (o namespace in inglese) siano inclusi correttamente. Per fare ciò si utilizzano le dichiarazioni d’uso, quindi il vostro codice dovrebbe contenere le seguenti linee:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

Ora potete accedere alle singole classi usando il nome dopo l’ultima barra obliqua.

Secondo passaggio: intercettare gli errori

Anche se PHPMailer è un modo molto affidabile per inviare e-mail, gli errori possono comunque verificarsi di tanto in tanto. Per evitare che i dati sensibili del vostro server di posta siano trasmessi agli utenti sotto forma di un messaggio di errore, vale la pena circoscrivere l’invio di e-mail con una cosiddetta istruzione try-catch:

try {
    // Tentativo di creazione di una nuova istanza della classe PHPMailer
    $mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
        echo "Mailer Error: ".$mail->ErrorInfo;
}

Terzo passaggio: autenticazione con SMTP

Per usare PHPMailer, dovete autenticarvi tramite SMTP. Per farlo, inserite l’indirizzo del server di posta, il protocollo corrispondente (o TLS/SSL o SMTP) compresa la porta, il nome utente e la password. Quale protocollo e quale porta sono usati dipende dal vostro provider di posta elettronica. I dati dei rispettivi server possono essere facilmente recuperati dai siti web dei provider di posta elettronica.

$mail->isSMTP();
$mail->SMTPAuth = true;
// Dati personali
$mail->Host = "smtp.dominio.it";
$mail->Port = "587";
$mail->Username = "nome.cognome@dominio.it";
$mail->Password = "passwordiprova4321";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;

Quarto passaggio: specificare il destinatario delle e-mail

Ora potete specificare i destinatari della vostra e-mail nello script.

// Mittente
$mail->setFrom('info@esempio.it', 'nome');
// Destinatario, opzionalmente può essere specificato anche il nome
$mail->addAddress('info@esempio.it', 'nome');
// Copia
$mail->addCC('info@esempio.it');
// Copia nascosta
$mail->addBCC('info@esempio.it', 'nome');

Quinto passaggio: aggiungere il contenuto del messaggio di posta

Naturalmente, non può mancare la cosa più importante: il contenuto dell’e-mail. Di solito consiste in un oggetto e il corpo del testo, che è visualizzato sia in versione HTML che non HTML. Importante: i vecchi software non gestiscono necessariamente l’attuale standard HTML5, quindi potrebbe essere utile progettare la vostra e-mail utilizzando solo HTML.

Con PHPMailer potete anche inviare allegati senza sforzo. La funzione addAttachment vi aiuta a farlo. Immagini, musica, documenti, video o GIF possono essere inviati con PHPMailer. Potete anche rinominare i vostri allegati con un secondo parametro opzionale che viene trasmesso alla funzione.

$mail->isHTML(true);
// Oggetto
$mail->Subject = 'L’oggetto della vostra e-mail';
// Contenuto HTML
$mail->Body = 'Il testo della vostra e-mail come contenuto HTML. Anche gli elementi <b> in grassetto </b> sono ammessi, per esempio.';
$mail->AltBody = 'Il testo come semplice elemento di testo';
// Aggiungere un allegato
$mail->addAttachment("/home/user/Desktop/immagineesempio.png", "immagineesempio.png");

Sesto passaggio: utilizzare la corretta codifica dei caratteri

In Italia, per via degli accenti, è consigliabile attivare la codifica UTF-8 su PHPMailer, in modo che non si verifichino errori di visualizzazione, soprattutto quando si utilizzano gli allegati. Per farlo, inserite le seguenti righe di codice al vostro script PHP:

$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';

Settimo passaggio: inviare l’e-mail

Nell’ultimo passaggio, dovete solo inviare la vostra e-mail. Per farlo, utilizzate il comando:

$mail->send();

Assicuratevi di mettere tutto il codice mostrato qui fino a questa richiesta di invio nel blocco d’istruzione try del vostro script, di modo che qualsiasi errore venga intercettato come descritto.

Un esempio di codice per inviare un’e-mail

Di seguito vi riassumiamo tutto il codice necessario per inviare un’e-mail con un allegato d’immagine a un destinatario di vostra scelta su PHPMailer:

<!--?php</codesnippet-->
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
try {
        // Creare un’istanza della classe PHPMailer
        $mail = new PHPMailer($debug);
        if ($debug) {
                // Emette un log dettagliato da
                $mail->SMTPDebug = PHPMailer\PHPMailer\SMTP::DEBUG_SERVER; }
        }
        // Autenticazione tramite SMTP
        $mail->isSMTP();
        $mail->SMTPAuth = true;
        // Login
        $mail->Host = "smtp.dominio.it";
        $mail->Port = "587";
        $mail->Username = "nome.cognome@dominio.it";
        $mail->Password = "passworddiprova4321";
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
        $mail->addAttachment("/home/user/Desktop/immagineesempio.png", "immagineesempio.png");
     $mail->CharSet = 'UTF-8';
     $mail->Encoding = 'base64';
        $mail->isHTML(true);
        $mail->Subject = 'L’oggetto della vostra e-mail';
     $mail->Body = 'Il testo della vostra e-mail come contenuto HTML. Anche gli elementi <b> in grassetto </b> sono ammessi, per esempio.';
     $mail->AltBody = 'Il testo come semplice elemento di testo';
        $mail->send();
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: ".$mail->ErrorInfo;
}