Come inviare e-mail con PHPMailer: una spiegazione

PHPMailer è una libreria del programma 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. Al contrario della funzione di e-mail, che è implementata su PHP sin dall’inizio, la probabilità che le e-mail inviate con PHPMailer finiscano nella cartella spam è molto più bassa, perché queste vengono inviate usando il protocollo SMTP (Simple Mail Transfer Protocol), che viene utilizzato per inviare e-mail su internet. Inoltre, questa classe supporta anche le e-mail e gli allegati in HTML, a differenza della funzione di posta elettronica integrata.

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. Si adatta bene anche ai moduli di contatto inseriti sul tuo sito web.

Requisiti per usare PHPMailer

Per poter lavorare con PHPMailer, avrai innanzitutto bisogno di un server SMTP. Dipende da te la scelta di utilizzare il server di posta elettronica di un provider o di configurare un server personale. Inoltre, si raccomanda un gestore di pacchetti per PHP come Composer per l’installazione dell’estensione PHP.

Consiglio

Un altro prerequisito per utilizzare PHPMailer è la padronanza delle basi di PHP. Se ancora non hai molta dimestichezza con questo linguaggio, segui il nostro tutorial su PHP per principianti.

Guida: installazione 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 manualmente da GitHub.

Prima variante: download tramite Composer

Se hai installato il gestore di pacchetti Composer, usa semplicemente il comando seguente:

composer require phpmailer/phpmailer
bash

Importante: se hai installato 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 comportamento imprevedibile o a errori del programma. L’installazione con Composer è ora completata.

Seconda variante: download diretto da GitHub

I file sorgente di PHPMailer possono anche essere scaricati manualmente facendo clic sul pulsante “Code” nel repository di GitHub corrispondente e scaricando il file ZIP. Se Git è installato sul tuo sistema, puoi in alternativa “clonare” il repository usando un comando del terminale.

Secondo passaggio: decomprimere i file

Se hai scaricato manualmente il codice sorgente di PHPMailer, devi aprire il file ZIP. Per farlo, seleziona la posizione in cui desideri installare PHPMailer. Di nuovo, devi prima includere PHPMailer nel tuo script. Partendo dal presupposto che hai decompresso 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 comodamente a PHPMailer, assicurati prima che gli spazi dei nomi (o “namespace” in inglese) siano inclusi correttamente. Per fare ciò si utilizzano le dichiarazioni 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: 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 tuo 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, nel caso in cui siano attivate delle eccezioni
    $mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
        echo "Mailer Error: ".$e->getMessage();
}
php

Terzo passaggio: autenticazione con SMTP

Per usare PHPMailer, devi autenticarti tramite SMTP. Per farlo, inserisci 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 tuo 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;
php

Invece di ENCRYPTION_STARTTLS, è possibile specificare ENCRYPTION_SMTPS come metodo di cifratura. Con quest’ultimo, la connessione viene stabilita solo se il protocollo TLS è attivo. La comunicazione con un server è quindi possibile solo se questo supporta le misure di crittografia richieste. Con StartTLS, invece, la connessione al server di posta viene stabilita prima senza crittografia e solo dopo criptata. Se la crittografia TLS non è possibile, il resto dello scambio di dati non è crittografato.

SMTPS offre quindi un livello di sicurezza superiore, mentre StartTLS offre una migliore compatibilità. Per questo motivo, è preferibile utilizzare StartTLS.

Quarto passaggio: specificare il destinatario dell’e-mail

Ora puoi specificare i destinatari 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: 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 nel 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 tua e-mail utilizzando solo HTML.

Con PHPMailer puoi anche inviare gli allegati facilmente. La funzione addAttachment ti aiuta a farlo. Immagini, musica, documenti, video o GIF possono essere inviati con PHPMailer. Puoi anche rinominare 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: utilizzare la corretta codifica dei caratteri

Se si utilizzano caratteri speciali, come le dieresi, è 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, 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

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

Un esempio di codice per inviare un’e-mail

Di seguito ti riassumiamo tutto il codice necessario per inviare un’e-mail a un destinatario 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 per le tue esigenze

Scegli un indirizzo e-mail personalizzato e un nome per il dominio che rappresentino al meglio la tua azienda.

Semplice
Sicuro
Assistenza 24/7
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.