PHPMailer è una libreria del programma che regola l’invio di e-mail tramite PHP. Questo tipo di tra­smis­sio­ne e-mail è uti­liz­za­to prin­ci­pal­men­te per i moduli di contatto sui siti web, ma è possibile anche l’invio di e-mail private.

Cos’è PHPMailer?

PHPMailer è una classe di posta elet­tro­ni­ca per PHP, fornita dalla community. Al contrario della funzione di e-mail, che è im­ple­men­ta­ta su PHP sin dall’inizio, la pro­ba­bi­li­tà che le e-mail inviate con PHPMailer finiscano nella cartella spam è molto più bassa, perché queste vengono inviate usando il pro­to­col­lo SMTP (Simple Mail Transfer Protocol), che viene uti­liz­za­to per inviare e-mail su internet. Inoltre, questa classe supporta anche le e-mail e gli allegati in HTML, a dif­fe­ren­za della funzione di posta elet­tro­ni­ca integrata.

Per cosa si usa PHPMailer?

L’utilizzo di PHPMailer è un po’ più com­pli­ca­to rispetto all’uso di un provider o dei programmi di posta elet­tro­ni­ca integrati nel computer. Una domanda legittima è quindi in quali contesti vale la pena uti­liz­za­re PHPMailer. L’utilizzo del framework PHP rende più facile la creazione di risposte au­to­ma­ti­che, come quelle che si uti­liz­za­no quando si gestisce un negozio online. Si adatta bene anche ai moduli di contatto inseriti sul tuo sito web.

Requisiti per usare PHPMailer

Per poter lavorare con PHPMailer, avrai in­nan­zi­tut­to bisogno di un server SMTP. Dipende da te la scelta di uti­liz­za­re il server di posta elet­tro­ni­ca di un provider o di con­fi­gu­ra­re un server personale. Inoltre, si rac­co­man­da un gestore di pacchetti per PHP come Composer per l’in­stal­la­zio­ne dell’esten­sio­ne PHP.

Consiglio

Un altro pre­re­qui­si­to per uti­liz­za­re PHPMailer è la pa­dro­nan­za delle basi di PHP. Se ancora non hai molta di­me­sti­chez­za con questo lin­guag­gio, segui il nostro tutorial su PHP per prin­ci­pian­ti.

Guida: in­stal­la­zio­ne di PHPMailer

Primo passaggio: scaricare la versione attuale di PHPMailer

Scarica l’ultima versione di PHPMailer. Il download può essere eseguito tramite il gestore di pacchetti o ma­nual­men­te da GitHub.

Prima variante: download tramite Composer

Se hai in­stal­la­to il gestore di pacchetti Composer, usa sem­pli­ce­men­te il comando seguente:

composer require phpmailer/phpmailer
bash

Im­por­tan­te: se hai in­stal­la­to PHPMailer con Composer, devi includere quest’ultimo nel tuo codice PHP per poter inviare e-mail.

Per farlo, inserisci la seguente riga di codice:

require_once "vendor/autoload.php";
php

La parola chiave “require_once” assicura che Composer possa essere incluso una sola volta. Qualsiasi altra opzione potrebbe portare a un com­por­ta­men­to im­pre­ve­di­bi­le o a errori del programma. L’in­stal­la­zio­ne con Composer è ora com­ple­ta­ta.

Seconda variante: download diretto da GitHub

I file sorgente di PHPMailer possono anche essere scaricati ma­nual­men­te facendo clic sul pulsante “Code” nel re­po­si­to­ry di GitHub cor­ri­spon­den­te e sca­ri­can­do il file ZIP. Se Git è in­stal­la­to sul tuo sistema, puoi in al­ter­na­ti­va “clonare” il re­po­si­to­ry usando un comando del terminale.

Secondo passaggio: de­com­pri­me­re i file

Se hai scaricato ma­nual­men­te il codice sorgente di PHPMailer, devi aprire il file ZIP. Per farlo, seleziona la posizione in cui desideri in­stal­la­re PHPMailer. Di nuovo, devi prima includere PHPMailer nel tuo script. Partendo dal pre­sup­po­sto che hai de­com­pres­so i file PHPMailer in una directory chiamata con il nome del programma, usa 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';
/*Quando si crea un oggetto PHPMailer, occorre passare il parametro "true" per attivare le eccezioni (messaggi in caso di errore)*/
$email = new PHPMailer(true);
php

Guida: invio di e-mail con PHPMailer

Primo passaggio: integrare gli spazi dei nomi

Per accedere co­mo­da­men­te a PHPMailer, as­si­cu­ra­ti prima che gli spazi dei nomi (o “namespace” in inglese) siano inclusi cor­ret­ta­men­te. Per fare ciò si uti­liz­za­no le di­chia­ra­zio­ni d’uso, quindi il tuo codice dovrebbe contenere le seguenti righe:

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

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

Secondo passaggio: in­ter­cet­ta­re gli errori

Anche se PHPMailer è un modo molto af­fi­da­bi­le per inviare e-mail, gli errori possono comunque ve­ri­fi­car­si di tanto in tanto. Per evitare che i dati sensibili del tuo server di posta siano trasmessi agli utenti sotto forma di un messaggio di errore, vale la pena cir­co­scri­ve­re l’invio di e-mail con una co­sid­det­ta istru­zio­ne try-catch:

try {
    // Tentativo di creazione di una nuova istanza della classe PHPMailer, nel caso in cui siano attivate delle eccezioni
    $mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
        echo "Mailer Error: ".$e->getMessage();
}
php

Terzo passaggio: au­ten­ti­ca­zio­ne con SMTP

Per usare PHPMailer, devi au­ten­ti­car­ti tramite SMTP. Per farlo, inserisci l’indirizzo del server di posta, il pro­to­col­lo cor­ri­spon­den­te (o TLS/SSL o SMTP) compresa la porta, il nome utente e la password. Quale pro­to­col­lo e quale porta sono usati dipende dal tuo provider di posta elet­tro­ni­ca. I dati dei ri­spet­ti­vi server possono essere fa­cil­men­te re­cu­pe­ra­ti dai siti web dei provider di posta elet­tro­ni­ca.

$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;
php

Invece di ENCRYPTION_STARTTLS, è possibile spe­ci­fi­ca­re ENCRYPTION_SMTPS come metodo di cifratura. Con quest’ultimo, la con­nes­sio­ne viene stabilita solo se il pro­to­col­lo TLS è attivo. La co­mu­ni­ca­zio­ne con un server è quindi possibile solo se questo supporta le misure di crit­to­gra­fia richieste. Con StartTLS, invece, la con­nes­sio­ne al server di posta viene stabilita prima senza crit­to­gra­fia e solo dopo criptata. Se la crit­to­gra­fia TLS non è possibile, il resto dello scambio di dati non è crit­to­gra­fa­to.

SMTPS offre quindi un livello di sicurezza superiore, mentre StartTLS offre una migliore com­pa­ti­bi­li­tà. Per questo motivo, è pre­fe­ri­bi­le uti­liz­za­re StartTLS.

Quarto passaggio: spe­ci­fi­ca­re il de­sti­na­ta­rio dell’e-mail

Ora puoi spe­ci­fi­ca­re i de­sti­na­ta­ri dell’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');
php

Quinto passaggio: ag­giun­ge­re il contenuto del messaggio di posta

Na­tu­ral­men­te, non può mancare la cosa più im­por­tan­te: il contenuto dell’e-mail. Di solito consiste in un oggetto e nel corpo del testo, che è vi­sua­liz­za­to sia in versione HTML che non HTML. Im­por­tan­te: i vecchi software non ge­sti­sco­no ne­ces­sa­ria­men­te l’attuale standard HTML5, quindi potrebbe essere utile pro­get­ta­re la tua e-mail uti­liz­zan­do solo HTML.

Con PHPMailer puoi anche inviare gli allegati fa­cil­men­te. La funzione ad­dAt­ta­ch­ment ti aiuta a farlo. Immagini, musica, documenti, video o GIF possono essere inviati con PHPMailer. Puoi anche ri­no­mi­na­re i tuoi allegati con un secondo parametro opzionale che viene trasmesso alla funzione.

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

Sesto passaggio: uti­liz­za­re la corretta codifica dei caratteri

Se si uti­liz­za­no caratteri speciali, come le dieresi, è con­si­glia­bi­le attivare la codifica UTF-8 su PHPMailer, in modo che non si ve­ri­fi­chi­no errori di vi­sua­liz­za­zio­ne, so­prat­tut­to quando si uti­liz­za­no gli allegati. Per farlo, inserisci le seguenti righe di codice nel tuo script PHP:

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

Settimo passaggio: inviare l’e-mail

Nell’ultimo passaggio, devi solo inviare la tua e-mail. Per farlo, utilizza il comando:

$mail->send();
php

As­si­cu­ra­ti di mettere tutto il codice mostrato qui fino a questa richiesta di invio nel blocco d’istru­zio­ne try del tuo script, di modo che qualsiasi errore venga in­ter­cet­ta­to come descritto.

Un esempio di codice per inviare un’e-mail

Di seguito ti rias­su­mia­mo tutto il codice ne­ces­sa­rio per inviare un’e-mail a un de­sti­na­ta­rio a scelta con un’immagine in allegato su PHPMailer:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
// Attivare o disattivare le eccezioni tramite la variabile
$debug = true;
try {
    // Creare un’istanza della classe PHPMailer
    $mail = new PHPMailer($debug);
    if ($debug) {
        // Emette un log dettagliato da
        $mail->SMTPDebug = 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->setFrom('info@esempio.it', 'nome');
    $mail->addAddress('info@esempio.it', 'nome');
    $mail->addAttachment("/home/user/Desktop/immagineesempio.png", "immagineesempio.png");
    $mail->CharSet = 'UTF-8';
    $mail->Encoding = 'base64';
    $mail->isHTML(true);
    $mail->Subject = 'L’oggetto della tua e-mail';
    $mail->Body = 'Il testo della tua e-mail come contenuto HTML. Ad esempio, Anche gli elementi <b> in grassetto </b> sono ammessi.';
    $mail->AltBody = 'Il testo come semplice elemento testuale';
    $mail->send();
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: ".$e->getMessage();
}
php
Servizi di hosting e-mail su misura per le tue esigenze
  • Indirizzo e-mail per­so­na­liz­za­to
  • Accedi alle tue e-mail da qualsiasi luogo
  • Massimi standard di sicurezza
Vai al menu prin­ci­pa­le