Non perdere le offerte a tempo limitato!

Come inviare email dal server con PHPMailer

Come inviare email dal server con PHPMailer

L’email è essenziale per qualsiasi sito web. Viene utilizzata per tutto, dal reset delle password alle richieste dei clienti. La funzione PHP mail() può inviare messaggi semplici, ma spesso non riesce a recapitarli nella posta in arrivo e non offre le funzionalità su cui le aziende fanno affidamento.

PHPMailer risolve questi problemi offrendo autenticazione SMTP, crittografia sicura, formattazione HTML e supporto per gli allegati. In questo modo i tuoi messaggi hanno un aspetto professionale e raggiungono davvero i destinatari.

Per sfruttare al meglio PHPMailer, devi sapere come:

  • Installare la libreria con Composer o manualmente
  • Configurare le impostazioni SMTP per una consegna affidabile
  • Usare i componenti principali di PHPMailer come setFrom(), addAddress() e Body
  • Creare un modulo di contatto funzionante con validazione
  • Collegare PHPMailer a Gmail e ad altri fornitori
  • Risolvere errori comuni come i problemi di connessione SMTP e di autenticazione DNS

Cos’è PHPMailer

PHPMailer è una libreria PHP che ti permette di inviare email direttamente dal tuo server. A differenza della funzione PHP mail(), supporta funzionalità avanzate come:

  • Autenticazione SMTP e crittografia (SSL/TLS)
  • Messaggi HTML e versioni alternative in testo semplice
  • Allegati e immagini inline
  • Intestazioni personalizzate e indirizzi Reply-To

Queste funzionalità rendono PHPMailer una delle soluzioni più utilizzate dagli sviluppatori che hanno bisogno di gestire email in modo sicuro e professionale nelle loro applicazioni.

PHPMailer è meglio della funzione mail()?

Sì, nella maggior parte dei casi PHPMailer è una scelta migliore rispetto alla funzione mail(). Ecco perché:

  • Affidabilità. Funziona con SMTP, riducendo la probabilità che le email finiscano nello spam.
  • Sicurezza. Supporta metodi di autenticazione moderni come TLS.
  • Flessibilità. Permette di aggiungere allegati, usare la formattazione HTML e configurare intestazioni avanzate.
  • Compatibilità. È ampiamente supportato e viene aggiornato regolarmente per funzionare con le nuove versioni di PHP.

Se stai sviluppando qualcosa che va oltre un semplice script, PHPMailer offre molto più controllo e affidabilità rispetto alla funzione mail().

Come usare PHPMailer per inviare email

Segui questi passaggi per inviare email con PHPMailer:

  1. Scarica e installa PHPMailer usando Composer o GitHub.
  2. Carica la libreria nel tuo script PHP tramite un autoloader oppure manualmente.
  3. Crea una nuova istanza di PHPMailer.
  4. Configura le impostazioni SMTP (server, porta, nome utente e password).
  5. Imposta i dettagli dell’email come il mittente, il destinatario, l’oggetto e il contenuto del messaggio.
  6. Invia l’email e gestisci eventuali errori.

Ecco un semplice esempio:

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

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    // Configurazione SMTP
    $mail->isSMTP();
    $mail->Host       = 'smtp.example.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'tua@email.com';
    $mail->Password   = 'password';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    // Impostazioni email
    $mail->setFrom('tua@email.com', 'Tuo nome');
    $mail->addAddress('destinatario@dominio.com');
    $mail->Subject = 'Email di prova';
    $mail->Body    = 'Questa è una email di prova inviata con PHPMailer.';

    $mail->send();
    echo 'Il messaggio è stato inviato';
} catch (Exception $e) {
    echo "Errore: {$mail->ErrorInfo}";
}

Come installare PHPMailer

Il modo più semplice per installare PHPMailer è usare Composer, il gestore delle dipendenze per PHP. Esegui questo comando nella directory principale del tuo progetto:

composer require phpmailer/phpmailer

Dopo l’installazione, troverai PHPMailer all’interno della cartella vendor/ del progetto:

/your-project  
  /vendor  
    /phpmailer  
      /phpmailer  

Per usarlo, carica l’autoloader di Composer all’inizio dello script PHP:

require 'vendor/autoload.php';

Se non usi Composer, puoi anche scaricare PHPMailer da GitHub. In questo caso, inserisci la cartella PHPMailer nel progetto e includi i file manualmente:

require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/Exception.php';

Composer è fortemente consigliato per chi è alle prime armi, perché gestisce le dipendenze e rende più semplici gli aggiornamenti.

Come funzionano i componenti di PHPMailer

PHPMailer offre diversi metodi e proprietà per creare email professionali. Ecco quelli più importanti, insieme a brevi esempi che puoi riutilizzare:

  • setFrom() – definisce l’indirizzo e il nome del mittente.
 $mail->setFrom('no-reply@domain.com', 'Nome del sito web');
  • addAddress() – aggiunge uno o più destinatari.
$mail->addAddress('utente@example.com', 'John Doe');
$mail->addAddress('admin@example.com'); // più destinatari
  • addReplyTo() – specifica l’indirizzo email di risposta. È utile per i moduli di contatto.
$mail->addReplyTo('supporto@dominio.com', 'Team di supporto');
  • Subject – imposta l’oggetto dell’email.
$mail->Subject = 'Conferma ordine';
  • Body – definisce il contenuto principale dell’email in HTML o in testo semplice.
$mail->Body = '<h1>Grazie!</h1><p>Il tuo ordine è stato ricevuto.</p>';
  • AltBody – fornisce un’alternativa in testo semplice per i client che non supportano HTML.
$mail->AltBody = 'Grazie! Il tuo ordine è stato ricevuto.';
  • addAttachment() – allega file all’email.
$mail->addAttachment('/path/to/fattura.pdf', 'Fattura.pdf');

Questi componenti ti permettono di controllare completamente il contenuto e il funzionamento delle email, offrendo maggiore affidabilità rispetto alla funzione PHP mail().

Come usare PHPMailer con l’SMTP di Hostinger

La maggior parte dei fornitori di hosting, incluso Hostinger, ti permette di inviare email tramite i propri server SMTP. Questo è il metodo consigliato perché migliora il recapito dei messaggi e riduce il rischio che le email vengano contrassegnate come spam.

Per usare l’SMTP di Hostinger con PHPMailer, ti serviranno questi dati:

  • Server SMTP: smtp.hostinger.com
  • Porta: 587 (TLS) oppure 465 (SSL)
  • Nome utente: il tuo indirizzo email completo (ad esempio, yourname@yourdomain.com)
  • Password: la password dell’account email

Ecco un esempio di configurazione:

$mail->isSMTP();
$mail->Host       = 'smtp.hostinger.com';
$mail->SMTPAuth   = true;
$mail->Username   = 'tua@hostinger.com';
$mail->Password   = 'password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // or ENCRYPTION_SMTPS for port 465
$mail->Port       = 587;

🔑 Consigli per chi è alle prime armi:

  • Verifica di aver già creato un account email in hPanelEmailCaselle di postaAggiungi caselle di posta.
  • Usa la password SMTP che hai impostato quando hai creato l’account email, non la password di accesso a Hostinger.
  • Prova ad accedere prima a Webmail con le stesse credenziali. Se funzionano lì, dovrebbero funzionare anche con PHPMailer.

Una volta configurato, PHPMailer utilizzerà i server di Hostinger per inviare email in modo sicuro.

Come creare un modulo di contatto con PHPMailer

PHPMailer viene spesso utilizzato per gestire i moduli di contatto. Avrai bisogno di un modulo HTML nella pagina e di uno script PHP che usa PHPMailer per inviare il messaggio.

Passaggio 1. Aggiungi un modulo HTML di base

Questo modulo raccoglie il nome, l’indirizzo email e il messaggio del visitatore. Salvalo come index.html oppure inseriscilo direttamente nella pagina web:

<form method="POST" action="/contact.php">
  <label for="name">Nome</label>
  <input id="name" name="name" type="text" required>

  <label for="email">Email</label>
  <input id="email" name="email" type="email" required>

  <label for="message">Messaggio</label>
  <textarea id="message" name="message" rows="6" required></textarea>

  <button type="submit">Invia</button>
</form>

Passaggio 2. Gestisci la richiesta POST con PHPMailer

Ora che il modulo è pronto, crea uno script PHP (contact.php) per elaborare l’invio e inviare il messaggio tramite PHPMailer. Questo script recupera i dati inviati dal modulo, li valida e li sanitizza, quindi li invia al tuo indirizzo email tramite PHPMailer:

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

require 'vendor/autoload.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Validazione e sanitizzazione di base
    $name    = trim($_POST['name'] ?? '');
    $email   = trim($_POST['email'] ?? '');
    $message = trim($_POST['message'] ?? '');

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        exit('Indirizzo email non valido.');
    }
    // Escape del contenuto dell’utente prima di inserirlo nell’HTML
    $safeName    = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
    $safeEmail   = htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
    $safeMessage = nl2br(htmlspecialchars($message, ENT_QUOTES, 'UTF-8'));

    $mail = new PHPMailer(true);

    try {
        // SMTP
        $mail->isSMTP();
        $mail->Host       = 'smtp.hostinger.com';
        $mail->SMTPAuth   = true;
        $mail->Username   = 'tuo@hostinger.com';
        $mail->Password   = 'password';
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 587
        $mail->Port       = 587;

        // Contenuto dell’email
        $mail->setFrom('tuo@hostinger.com', 'Contatto del sito');
        $mail->addAddress('tuo@hostinger.com', 'Posta in arrivo');
        $mail->addReplyTo($email, $name);

        $mail->Subject = 'Nuovo invio dal modulo di contatto';
        $mail->isHTML(true);
        $mail->Body    = "<p><strong>Nome:</strong> {$safeName}</p>
                          <p><strong>Email:</strong> {$safeEmail}</p>
                          <p><strong>Messaggio:</strong><br>{$safeMessage}</p>";
        $mail->AltBody = "Nome: {$name}\nEmail: {$email}\nMessaggio:\n{$message}";

        // Caricamento file opzionale
        // if (!empty($_FILES['attachment']['tmp_name'])) {
        //     $mail->addAttachment($_FILES['attachment']['tmp_name'], $_FILES['attachment']['name']);
        // }

        $mail->send();
        echo 'Messaggio inviato con successo.';
    } catch (Exception $e) {
        echo 'Errore: ' . $mail->ErrorInfo;
    }
}

Consigli utili:

  • Convalida l’input sia lato client sia lato server per prevenire spam e abusi.
  • Imposta From con un indirizzo del tuo dominio e usa addReplyTo() con l’email del visitatore, così le risposte verranno inviate direttamente a lui.
  • Valuta di aggiungere un campo honeypot o un CAPTCHA per ridurre gli invii automatici dei bot.

Come risolvere gli errori più comuni di PHPMailer

PHPMailer mostra messaggi di errore dettagliati che ti aiutano a individuare rapidamente il problema. Ecco alcuni degli errori più comuni e come risolverli.

Impossibile connettersi all’host SMTP

Questo errore di solito significa che l’indirizzo o la porta del server SMTP non sono corretti. Le cause più comuni includono:

  • Nome del server errato. Controlla di nuovo i dettagli SMTP forniti dal tuo hosting. Ad esempio, con Hostinger il server SMTP è di solito smtp.hostinger.com.
  • Porta bloccata. Molti server bloccano la porta 25. Usa invece la porta 587 (TLS) oppure 465 (SSL).
  • Restrizioni del firewall. Se stai testando in locale (per esempio con XAMPP o WAMP), il tuo ISP o il firewall potrebbero bloccare le connessioni SMTP in uscita.

👉 Se non sei sicuro delle impostazioni da usare, chiedi al tuo fornitore di hosting quali dati SMTP usare e verifica che le porte siano aperte sulla tua rete.

Connessione SMTP non riuscita (SMTP connect() failed)

Questo errore indica spesso un problema di autenticazione. In pratica, PHPMailer riesce a raggiungere il server, ma le credenziali non vengono accettate. Le cause più comuni sono:

  • Nome utente errato. Usa sempre il tuo indirizzo email completo come nome utente SMTP.
  • Password errata. Se hai cambiato di recente la password dell’account email, aggiornala anche nello script.
  • Metodo di crittografia non corretto. Verifica di usare il metodo di sicurezza giusto. Ad esempio:
    • Porta 587 → PHPMailer::ENCRYPTION_STARTTLS
    • Porta 465 → PHPMailer::ENCRYPTION_SMTPS

👉 Se il problema persiste, prova ad accedere al tuo account tramite Webmail per verificare che le credenziali siano corrette.

Messaggio rifiutato a causa di SPF, DKIM o DMARC

Questo significa che il server di posta del destinatario ha rifiutato il messaggio perché il dominio non ha record di autenticazione configurati correttamente. Si tratta di record DNS che dimostrano che sei autorizzato a inviare email dal tuo dominio.

  • SPF (Sender Policy Framework). Indica ai server di posta quali IP o host possono inviare email per il tuo dominio.
  • DKIM (DomainKeys Identified Mail). Aggiunge una firma digitale che conferma che il messaggio non è stato modificato durante l’invio.
  • DMARC (Domain-based Message Authentication, Reporting & Conformance). Indica ai server destinatari come gestire i messaggi che non superano i controlli SPF o DKIM.

👉 Per risolvere il problema, accedi al pannello del tuo registrar di domini o al pannello di hosting e aggiungi i record DNS richiesti. La maggior parte dei fornitori di hosting, incluso Hostinger, offre guide passo per passo per configurare SPF, DKIM e DMARC.

Senza questi record, è molto più probabile che le email finiscano nello spam o vengano rifiutate completamente.

Posso inviare email con PHPMailer a Gmail o ad altri servizi email?

Sì. PHPMailer funziona con Gmail, Outlook, Yahoo e con la maggior parte degli altri fornitori. Ti servono solo le impostazioni SMTP corrette e il metodo di autenticazione giusto. Per esempio, per Gmail puoi usare queste impostazioni:

  • Server SMTP: smtp.gmail.com
  • Porta: 587 (TLS) oppure 465 (SSL)
  • Nome utente: il tuo indirizzo Gmail completo
  • Password: la password per le app se hai attivato la verifica in due passaggi
  • Nel tuo Account Google, crea una password per le app in SicurezzaVerifica in due passaggiPassword per le app e usala nel parametro $mail->Password.

Esempio:

$mail->isSMTP();
$mail->Host       = 'smtp.gmail.com';
$mail->SMTPAuth   = true;
$mail->Username   = 'iltuonome@gmail.com';
$mail->Password   = 'tua-password-per-le-app'; // non la tua normale password di accesso
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port       = 587;

Tieni presente che alcuni fornitori applicano limiti di invio. Molte caselle email gratuite hanno un limite giornaliero di messaggi. Ad esempio, Gmail ha un limite relativamente basso per l’invio tramite SMTP. Se hai bisogno di inviare più email o di migliorare la velocità di consegna, valuta l’uso di un servizio email dedicato. PHPMailer può comunicare con qualsiasi server SMTP, quindi passare a un altro fornitore in futuro è semplice.

Checklist generale:

  • Usa la porta e il metodo di crittografia consigliati dal fornitore.
  • Autenticati con le credenziali corrette.
  • Imposta From su un indirizzo del dominio che controlli per migliorare il recapito.
  • Aggiungi i record SPF, DKIM e DMARC al dominio per aumentare l’affidabilità delle email.

L’email è ancora la base dei servizi online?

Sì. L’email resta uno dei metodi più affidabili per inviare messaggi transazionali, campagne di marketing e risposte dell’assistenza clienti, anche con la diffusione di nuovi strumenti di comunicazione. Per le aziende, una configurazione email professionale con automazione permette di risparmiare tempo e migliorare il coinvolgimento degli utenti.

Se vuoi andare oltre l’invio manuale delle email, valuta l’uso di strumenti di email marketing automation per gestire campagne e comunicazioni con i clienti in modo più efficiente.

Tutti i contenuti dei tutorial presenti su questo sito web sono soggetti ai rigorosi standard editoriali e ai valori di Hostinger.

Author
L'autore

Faradilla Ayunindya

Faradilla, conosciuta anche come Ninda, è Content Marketing Specialist in Hostinger, con oltre 5 anni di esperienza nel settore e un background di 10 anni come linguista. Si dedica a rendere la tecnologia più accessibile, adattando guide complesse in tutorial chiari e facili da seguire. Nel tempo libero, quando non è impegnata a seguire le ultime tendenze del mondo tech e del digital marketing, ama approfondire temi legati alle scienze della vita o guardare video divertenti di animali. Puoi connetterti con lei su LinkedIn.

Cosa dicono i nostri clienti

Lascia un commento

Please fill the required fields.Please accept the privacy checkbox.Please fill the required fields and accept the privacy checkbox.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.