PHP / DEV WEB – Envoyer des mails sans SMTP

PHP / DEV WEB – Envoyer des mails sans SMTP

0 commentaire(s)

Quand on développe une application Web, on peut parfois avoir besoin de simuler des envois de mail : validation d’adresses e-mail, notifications, récupération de mot de passe, etc.

En environnement de développement, envoyer de vrais mails n’a aucun intérêt : c’est lent, c’est souvent filtré, et ça peut vite tourner au spam (surtout si on utilise des adresses de test ou un faux SMTP mal configuré).

Même si c’est nécessaire de configurer pour la production un vrai serveur SMTP, en local, autant garder ça simple et efficace.

L’astuce que je vous partage aujourd’hui concerne Symfony, plus exactement une version 6.4, presque en fin de vie aujourd’hui, mais encore largement utilisée. Le composant Mailer est bien fichu, il propose plusieurs solutions qui, au passage, peuvent s’adapter à d’autres frameworks ou projets web.

Voici donc un petit tour d’horizon des méthodes que j’ai testées, et surtout celles qui m’ont le plus convaincu.

🧪 1. Méthode 1 – null://null


C’est une méthode minimaliste, parfaite pour juste un ou deux mails, ne pas bloquer ton projet.

Dans le fichier .env

Text
MAILER_DSN=null://null

Le mailer de Symfony ne fait rien avec ce transport. Pas d’envoi, pas de log, pas de trace. C’est du silencieux total : ton code passe, mais aucun mail n’est envoyé ni visible.

👉 Pratique pour valider que le flux fonctionne, mais totalement inutile si tu veux voir le contenu de tes mails ou visualiser le HTML de celui-ci.

Si vraiment vous avez besoin de voir quelque chose, vous pouvez bricoler un listener qui loggue les messages (MessageLoggerListener, par exemple), mais soyons honnêtes : c’est crado, ça dépanne, mais c’est pas propre.

🌐 2. Méthode 2 – Utilisation de Mailtrap pour le développement local


Mailtrap est un service conçu pour capturer les emails envoyés en développement, vous permettant de les visualiser sans les envoyer réellement. C’est une solution idéale pour tester l’envoi d’emails sans risque.

🔧 2.1. Configuration avec Symfony


  • Inscription sur Mailtrap
  • Créez un compte sur Mailtrap et créez un inbox pour votre projet.
  • Récupération des informations de connexion
  • Une fois l’inbox créé, récupérez les informations nécessaires : utilisateur, mot de passe, hôte et port.
  • Mise à jour du fichier .env
  • Dans votre fichier .env, configurez le DSN de Symfony Mailer comme suit : env
Text
MAILER_DSN=smtp://<utilisateur>:<motdepasse>@smtp.mailtrap.io:2525

Remplacez " utilisateur " et " motdepasse " par les informations fournies par Mailtrap.

✅ Avantages

  • Visualisation des emails : Accédez à une interface web pour consulter les emails envoyés.
  • Sécurité : Aucun email n’est réellement envoyé, ce qui évite les erreurs en production.
  • Facilité d’intégration : Compatible avec Symfony et d’autres frameworks PHP.

⚠️ Remarque

Bien que Mailtrap soit une solution puissante, il est important de noter qu’il s’agit d’un service externe. Assurez-vous de ne pas l’utiliser en production pour éviter tout envoi accidentel d’emails réels.

🪐 3. Méthode 3 – MailHog, mon autre chouchou


Les choses sérieuses !

MailHog est un faux serveur SMTP qui récupère tous vos mails et permet de les consulter dans une interface web très propre.

C’est un excellent moyen de simuler un environnement de production sans risque, tout en restant en local. Cela permet de tester l’envoi de mails sans perturber des boîtes réelles.

Il suffit de lancer MailHog, faire pointer Symfony vers celui-ci, et hop, tous les mails sont interceptés et lisibles dans votre navigateur.

🐳 3.1. Option 1 – Faire tourner MailHog via Docker


Si vous êtes familier avec Docker, c’est de loin la méthode la plus rapide, propre et portable. Voici la commande pour lancer MailHog dans un conteneur Docker :

Bash
docker run -d \
--name mailhog \
-p 1025:1025 \
-p 8025:8025 \
mailhog/mailhog

Cela expose un serveur SMTP sur localhost:1025 et une interface web pour consulter les mails sur localhost:8025 (http://localhost:8025).

Dans votre fichier .env, vous indiquez simplement :

Text
MAILER_DSN=smtp://localhost:1025

C’est tout ! Lorsque vous envoyez un mail depuis Symfony, vous pourrez le voir immédiatement dans l’interface web de MailHog.

🔧 3.2. Option 2 – native, sans Docker (Debian, Linux)


Si vous n’êtes pas fan de Docker ou si vous préférez une installation native, vous pouvez faire tourner MailHog directement sur votre machine. MailHog est écrit en Go, et l’installation est donc ultra simple.

Voici la procédure pour installer MailHog nativement :

Bash
wget https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_linux_amd64
chmod +x MailHog_linux_amd64
sudo mv MailHog_linux_amd64 /usr/local/bin/mailhog

Si vous avez déjà go, il est possible de l’installer avec la commande :

Bash
# Installation du binaire
go install mailhog
# On modifie la variable $PATH pour accéder au binaire sans le chemin
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc
# ou
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrc

Ensuite, lancez MailHog avec :

Bash
mailhog

Même ports, même interface. Même résultat.

Personnellement, j’en est fait un service et un artile qui en parle :

Mailhog en service sous Debian 12.

📊 Et dans Symfony ?

Il est important de noter que, dans tous les cas, MailHog est capté par le Web Profiler de Symfony. Vous pourrez donc consulter vos mails directement depuis l’interface de débogage de Symfony, dans l’onglet « Mails » de votre profiler. Cela peut être très pratique pour une consultation rapide des mails envoyés pendant le développement.

🧠 4. Too long; Didn’t Read


Méthode Envoi réel ? Voir contenu ? Idéal pour
null://null ❌ ❌ Appels à vide
MailTrap ✅ / ❌ ✅ (fichier) Simulation réaliste
MailHog ❌ ✅ (web UI) Simulation réaliste

💬 5. Conclusion


Quand on travaille avec des mails en environnement de développement, il n’y à pas de raison de perdre du temps avec des SMTP réels.

MailHog fait le travail 100 fois mieux, en local, sans douleur, et surtout sans risquer d’envoyer un mail via le SMTP de production à cause d’un oubli dans la configuration.

Personnellement, je bosse toujours avec un petit container MailHog qui tourne sur mes projets Symfony. C’est simple, efficace, et franchement agréable à utiliser.

Vous aimerez peut-être aussi :

Commentaires

Aucun commentaire approuvé pour le moment.

Connectez-vous avec un compte commentateur pour publier un commentaire. Se connecter.