Symfony/Mailer pour PHP : guide complet pour l'envoi d'emails
1. Qu'est-ce que c'est et pourquoi l'utiliser
Symfony/Mailer est un composant puissant et flexible de l'écosystème Symfony, conçu pour envoyer des emails depuis des applications PHP. Contrairement à la fonction PHP native mail(), qui nécessite une configuration manuelle des en-têtes et des types MIME, Symfony/Mailer offre une API orientée objet pour créer, formater et envoyer des messages via différents transports (SMTP, Sendmail, API de services tiers).
L'objectif principal de cette bibliothèque est d'abstraire le processus d'envoi d'emails, permettant au développeur de se concentrer sur le contenu du message plutôt que sur les détails de bas niveau des protocoles. Symfony/Mailer prend en charge les templates HTML, les pièces jointes, l'incorporation d'images, la signature DKIM, ainsi que l'intégration avec les services email populaires via le Mailer DSN (Data Source Name).
Cette bibliothèque est indispensable pour les projets nécessitant un envoi fiable d'emails transactionnels (confirmation d'inscription, réinitialisation de mot de passe, notifications), de newsletters marketing ou de toute autre notification par email. Grâce à son architecture modulaire, Symfony/Mailer est facile à tester (via MockTransport) et à faire évoluer.
2. Installation
L'installation se fait via Composer, le gestionnaire de paquets standard pour PHP. Exécutez dans le terminal à la racine de votre projet :
composer require symfony/mailer
Si vous utilisez Symfony Flex (recommandé), un fichier de configuration config/packages/mailer.yaml sera automatiquement créé après l'installation. Pour travailler avec des services email populaires (SendGrid, Mailgun, Amazon SES, etc.), installez l'adaptateur correspondant, par exemple :
composer require symfony/sendgrid-mailer
composer require symfony/mailgun-mailer
composer require symfony/amazon-mailer
Le composant symfony/http-client est également nécessaire pour les transports API :
composer require symfony/http-client
3. Démarrage rapide — exemple minimal fonctionnel
Après l'installation de la bibliothèque, vous pouvez envoyer votre premier email en quelques lignes. Créez un fichier send_email.php :
<?php
// send_email.php
require_once 'vendor/autoload.php';
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
use Symfony\Component\Mime\Email;
// 1. Création du transport (serveur SMTP Gmail)
$transport = new EsmtpTransport('smtp.gmail.com', 587, true);
$transport->setUsername('votre-email@gmail.com');
$transport->setPassword('votre-mot-de-passe-application'); // Utilisez un mot de passe d'application
// 2. Création du Mailer
$mailer = new Mailer($transport);
// 3. Création de l'email
$email = (new Email())
->from('votre-email@gmail.com')
->to('destinataire@example.com')
->subject('Bonjour de Symfony Mailer !')
->text('Ceci est un email de test envoyé avec Symfony/Mailer.')
->html('Bonjour !
Ceci est la version HTML de l\'email.
');
// 4. Envoi
try {
$mailer->send($email);
echo "Email envoyé avec succès !\n";
} catch (\Exception $e) {
echo "Erreur : " . $e->getMessage() . "\n";
}
Exécutez le script :
php send_email.php
Si tout est correctement configuré, vous recevrez l'email à l'adresse indiquée.
4. Méthodes/classes principales
4.1. Email::class — classe pour créer un email
Signature : new Email() (constructeur sans paramètres)
Fonction : Crée un objet email avec des méthodes setter pour configurer tous les attributs (expéditeur, destinataire, sujet, corps du message, pièces jointes, etc.).
Exemple :
use Symfony\Component\Mime\Email;
$email = (new Email())
->from('expediteur@example.com')
->to('destinataire@example.com')
->cc('copie@example.com')
->bcc('copie-cachee@example.com')
->replyTo('reponse@example.com')
->subject('Sujet de l\'email')
->text('Contenu texte')
->html('Contenu HTML
'); Aussi dans la bibliothèque
Netty pour Java : guide complet avec exemples
Générateur de QR codes en Go (Golang) : bibliothèque go-qrcode
Kotlin Multiplatform : guide complet avec exemples en Kotlin
Géolocalisation et cartes en TypeScript : bibliothèques, API et exemples de code