Symfony/Mailer PHP : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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

');

Recommendations