La fonction intégrée mail() de PHP transmet les messages au binaire sendmail local, sans authentification SMTP, sans négociation TLS et sans signalement structuré des erreurs. PHPMailer apporte aux applications PHP un client SMTP, la mise en forme MIME et la prise en charge des pièces jointes.
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}";
}
Choisissez SMTPSecure selon le port de votre serveur : ENCRYPTION_STARTTLS sur le port 587 fait passer une connexion non chiffrée en TLS, tandis que ENCRYPTION_SMTPS sur le port 465 négocie TLS dès la connexion. Définir isHTML(true) indique que Body est en HTML et ajoute AltBody comme partie en texte brut pour les clients qui n'affichent pas le HTML. Inclure les deux parties améliore aussi la délivrabilité. Si vous passez true au constructeur, les échecs lèvent une Exception au lieu de renvoyer false.
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
Pour envoyer des e-mails depuis PHP via HTTPS sans gérer de connexion SMTP, installez le SDK PHP Bird (composer require messagebird/sdk) et appelez $bird->email->send() :
<?php
use MessageBird\Bird;
$bird = new Bird(apiKey: getenv("BIRD_API_KEY"));
$message = $bird->email->send(
from: "onboarding@messagebird.dev",
to: ["delivered@messagebird.dev"],
subject: "Hello from PHP",
html: "<p>It works.</p>",
);
echo $message->getId(), " ", $message->getStatus(), "\n";
L'expéditeur onboarding@messagebird.dev et le destinataire sandbox delivered@messagebird.dev vous permettent de vérifier votre clé API et votre payload avant de configurer un domaine personnalisé.