Email

Inviare email con PHPMailer

PHPMailer è la libreria più utilizzata per inviare email da PHP. Wrappa SMTP così da configurare host, porta e credenziali una sola volta, per poi costruire e inviare messaggi con un'interfaccia a oggetti API chiara. La funzione integrata mail() di PHP fa troppo poco (nessuna autenticazione, segnalazione errori debole), ed è per questo che la maggior parte dei progetti sceglie PHPMailer. Ecco un invio completo e funzionante.

Come si installa PHPMailer?

Usa Composer:

composer require phpmailer/phpmailer

Poi carica l'autoloader e importa le classi necessarie:

<?php
require "vendor/autoload.php";

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

Come si configura SMTP e si invia un messaggio?

Crea un'istanza di PHPMailer, attiva la modalità SMTP con isSMTP(), poi imposta i campi di connessione e messaggio. Racchiudi la chiamata in un try/catch così un invio fallito viene segnalato invece che ignorato:

<?php
$mail = new PHPMailer(true); // true enables exceptions

try {
    // Server settings
    $mail->isSMTP();
    $mail->Host       = "smtp.example.com";
    $mail->SMTPAuth   = true;
    $mail->Username   = getenv("SMTP_USER");
    $mail->Password   = getenv("SMTP_PASS");
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    // Recipients
    $mail->setFrom("you@yourdomain.com", "Your App");
    $mail->addAddress("recipient@example.org", "Recipient Name");

    // Content
    $mail->isHTML(true);
    $mail->Subject = "Your receipt";
    $mail->Body    = "<p>Thanks for your order.</p>";
    $mail->AltBody = "Thanks for your order. This is the plain-text version.";

    $mail->send();
    echo "Message sent.";
} catch (Exception $e) {
    echo "Send failed: {$mail->ErrorInfo}";
}

Alcuni dettagli che creano problemi. SMTPSecure e Port vanno insieme: usa ENCRYPTION_STARTTLS con la porta 587, oppure ENCRYPTION_SMTPS con la porta 465. isHTML(true) indica a PHPMailer che il Body è HTML e di inviare AltBody come alternativa in testo semplice. Passa true al costruttore così i fallimenti lanciano un'eccezione Exception invece di restituire false silenziosamente.

Come si aggiunge un allegato?

Chiama addAttachment con un percorso file prima di send():

<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");

Il secondo argomento rinomina il file come lo vede il destinatario. Puoi chiamarlo più volte per allegati multipli.

Invialo con Bird

PHPMailer comunica tramite SMTP, il che significa che in produzione serve un mail server con una buona reputazione, record di autenticazione corretti e un modo per vedere cosa è successo dopo l'invio. Un HTTP API elimina il server. Invii JSON tramite HTTPS e ottieni una risposta strutturata. Con l'Bird email API lo stesso messaggio si riduce a una sola chiamata:

use Bird\Bird;

$bird = new Bird(getenv("BIRD_API_KEY"));

$bird->emails->send([
  "from"    => "you@yourdomain.com",
  "to"      => "delivered@bird.dev",
  "subject" => "Hello from PHP",
  "html"    => "<p>It works.</p>",
]);

L'indirizzo sandbox delivered@bird.dev accetta sempre la posta, così puoi verificare l'integrazione prima di inviare a caselle reali. Nessun socket SMTP, nessuna scelta di porta, nessuna reputazione da costruire.

FAQ

Perché non usare semplicemente la funzione mail() di PHP?

mail() passa il messaggio al binario sendmail locale senza autenticazione SMTP e quasi senza segnalazione errori. PHPMailer si autentica su un server remoto, supporta TLS, costruisce messaggi multipart e ti dice perché un invio è fallito.

Qual è la differenza tra Body e AltBody?

Body è la versione HTML e AltBody è il fallback in testo semplice. Con isHTML(true) impostato, i client che non possono renderizzare HTML mostrano AltBody, il che aiuta anche con la deliverability.

STARTTLS o SMTPS?

ENCRYPTION_STARTTLS sulla porta 587 aggiorna una connessione in chiaro a TLS, mentre ENCRYPTION_SMTPS sulla porta 465 è crittografato fin dall'inizio. Fai corrispondere l'impostazione alla porta che il tuo mail server si aspetta.

PHPMailer è lo strumento giusto quando vuoi inviare tramite SMTP da PHP. Se preferisci evitare di gestire il server, la guida all'invio di email mostra il percorso API nel dettaglio.

Costruisci sulla stessa rete.

Una chiave API di test è subito tua. L'accesso alla produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

La tua prossima idea.
Pronta a partire.