PHPMailer est la bibliothèque la plus utilisée pour envoyer des e-mails depuis PHP. Elle encapsule SMTP pour que vous configuriez un hôte, un port et des identifiants une seule fois, puis construisiez et envoyiez des messages avec une interface objet claire API. La fonction intégrée mail() de PHP en fait trop peu (pas d'authentification, signalement d'erreurs limité), c'est pourquoi la plupart des projets se tournent vers PHPMailer. Voici un envoi complet et fonctionnel.
Comment installer PHPMailer ?
Utilisez Composer :
composer require phpmailer/phpmailer
Chargez ensuite l'autoloader et importez les classes nécessaires :
<?php
require "vendor/autoload.php";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
Comment configurer SMTP et envoyer un message ?
Créez une instance PHPMailer, passez-la en mode SMTP avec isSMTP(), puis définissez les champs de connexion et de message. Encadrez l'appel dans un try/catch pour que les échecs d'envoi soient signalés plutôt qu'ignorés :
<?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}";
}
Quelques détails qui posent souvent problème. SMTPSecure et Port vont ensemble : utilisez ENCRYPTION_STARTTLS avec 587, ou ENCRYPTION_SMTPS avec 465. isHTML(true) indique à PHPMailer que le Body est en HTML et qu'il faut envoyer AltBody comme alternative en texte brut. Passez true au constructeur pour que les échecs lèvent une Exception au lieu de renvoyer false silencieusement.
Comment ajouter une pièce jointe ?
Appelez addAttachment avec un chemin de fichier avant send() :
<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");
Le deuxième argument renomme le fichier tel que le destinataire le voit. Vous pouvez l'appeler plusieurs fois pour joindre plusieurs fichiers.
Envoyez avec Bird
PHPMailer communique en SMTP, ce qui signifie qu'en production vous avez besoin d'un serveur de messagerie avec une bonne réputation, des enregistrements d'authentification corrects et un moyen de voir ce qui s'est passé après l'envoi. Une HTTP API supprime le serveur. Vous envoyez JSON via HTTPS et recevez une réponse structurée. Avec le guide e-mail Bird API, le même message se résume à un seul appel :
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'adresse sandbox delivered@bird.dev accepte toujours les e-mails, ce qui vous permet de vérifier l'intégration avant d'envoyer vers de vraies boîtes de réception. Pas de socket SMTP, pas de choix de port, pas de réputation à préchauffer vous-même.
FAQ
Pourquoi ne pas simplement utiliser la fonction mail() de PHP ?
mail() transmet le message au binaire sendmail local sans authentification SMTP et avec un signalement d'erreurs quasi inexistant. PHPMailer s'authentifie auprès d'un serveur distant, prend en charge TLS, construit des messages multipart et vous indique pourquoi un envoi a échoué.
Quelle est la différence entre Body et AltBody ?
Body est la version HTML et AltBody est l'alternative en texte brut. Avec isHTML(true) activé, les clients qui ne peuvent pas afficher le HTML montrent AltBody, ce qui contribue aussi à la délivrabilité.
STARTTLS ou SMTPS ?
ENCRYPTION_STARTTLS sur le port 587 met à niveau une connexion non chiffrée vers TLS, tandis que ENCRYPTION_SMTPS sur le port 465 est chiffré dès le départ. Faites correspondre le réglage au port attendu par votre serveur de messagerie.
PHPMailer est l'outil adapté quand vous voulez envoyer via SMTP depuis PHP. Si vous préférez ne pas gérer le serveur vous-même, le guide d'envoi d'e-mails présente le chemin API en détail.