2mail — relais SMTP depuis une infrastructure belge

SMTP pour Laravel — le courrier de votre application qui arrive

Laravel intègre une couche mail complète, avec files d'attente, modèles et notifications. Ce qu'il ne fournit pas, c'est la délivrabilité : elle dépend du serveur par lequel vous envoyez, et la configuration par défaut d'un serveur neuf fait rarement un bon expéditeur.

Laravel lit ses paramètres mail dans la configuration d'environnement. Vous y modifiez les données SMTP et le reste de votre application demeure inchangé — aucune adaptation des mailables, notifications ou files d'attente n'est nécessaire.

Pourquoi cela coince sans relais

Une application en développement envoie vers une adresse de test et tout semble correct. À la mise en production, le public change : de vraies adresses chez de vrais fournisseurs, qui contrôlent bel et bien l'authentification et la réputation. C'est le moment où les e-mails de réinitialisation cessent soudain d'arriver — chez une partie des utilisateurs seulement, ce qui rend le problème difficile à repérer.

Configurer le SMTP dans Laravel

1

Récupérer les données

Connectez-vous à votre compte 2mail et récupérez-y votre serveur SMTP, votre nom d'utilisateur et votre mot de passe.

2

Compléter dans Laravel

Les paramètres mail se trouvent dans le fichier d'environnement de votre application, pas dans le code. Vous réglez le mailer sur SMTP et renseignez les cinq données ci-dessous. N'oubliez pas l'adresse et le nom de l'expéditeur : ce sont des réglages distincts, à côté des données de connexion.

3

Authentifier le domaine

Veillez à ce que SPF, DKIM et DMARC soient correctement configurés pour votre domaine, afin que les destinataires puissent vérifier que le courrier vient bien de vous.

4

Tester

Depuis votre plateforme, envoyez un message de test vers une adresse chez un grand fournisseur et vérifiez qu'il arrive dans la boîte de réception et non dans les indésirables.

Les champs que Laravel demande

Chaque plateforme les nomme un peu différemment, mais il s'agit toujours des mêmes cinq champs. Les valeurs concrètes sont liées à votre compte et se trouvent dans votre compte 2mail — relevez-les à cet endroit, afin d'être certain d'utiliser les bonnes.

Champ Ce que vous indiquez
Serveur SMTP (host)Le nom de serveur figurant dans votre compte 2mail.
PortLe port correspondant au chiffrement que vous avez choisi ; votre compte indique lequel.
ChiffrementTLS. N'envoyez jamais sans chiffrement — vos identifiants circuleraient sinon en clair sur le réseau.
Nom d'utilisateurL'identifiant SMTP de votre compte 2mail.
Mot de passeLe mot de passe correspondant. N'utilisez jamais le mot de passe de la boîte aux lettres d'un collaborateur.

Configuration SMTP pour Laravel dans le code

Des exemples fonctionnels pour le port 587 avec STARTTLS, prêts à être repris. Remplacez l'adresse d'expéditeur par une adresse de votre propre domaine et vérifiez le nom du serveur et l'identifiant dans votre compte 2mail. Le mot de passe a sa place dans une variable d'environnement — jamais dans le code et jamais dans le gestionnaire de versions.

Le fichier .env : les variables MAIL_*

Laravel lit toutes les données de connexion dans .env. Le port 587 fonctionne avec STARTTLS : la connexion démarre en clair et passe en TLS avant même que votre identifiant ne circule sur le réseau. Le mot de passe ne figure que dans le fichier .env sur le serveur — ce fichier n'a pas sa place dans le gestionnaire de versions. Remplacez example.com par un domaine que vous avez authentifié dans 2mail.

MAIL_MAILER=smtp
MAIL_HOST=relay.2mail.eu
MAIL_PORT=587
MAIL_USERNAME="<2mail-smtp-login>"
MAIL_PASSWORD="<2mail-smtp-password>"
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"

# Only when config/mail.php still has an 'encryption' key (older projects):
MAIL_ENCRYPTION=tls

# When config/mail.php has a 'scheme' key instead: leave MAIL_SCHEME unset.
# "smtp" on port 587 upgrades to STARTTLS by itself; "tls" is not a valid scheme.

config/mail.php : le mailer smtp

Dans un projet standard, vous n'avez rien à modifier ici : le fichier lit simplement les variables de .env. Vérifiez-le tout de même lorsqu'un réglage reste sans effet — un hôte codé en dur dans ce fichier l'emporte toujours sur votre .env. Les projets récents ont une clé scheme, les plus anciens une clé encryption ; le reste est identique.

// config/mail.php
'default' => env('MAIL_MAILER', 'smtp'),

'mailers' => [
    'smtp' => [
        'transport' => 'smtp',
        'scheme' => env('MAIL_SCHEME'),                    // newer projects
        // 'encryption' => env('MAIL_ENCRYPTION', 'tls'),  // older projects use this key instead
        'host' => env('MAIL_HOST', 'relay.2mail.eu'),
        'port' => env('MAIL_PORT', 587),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
    ],
],

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Example'),
],

Envoyer un e-mail de test avec Tinker

Videz d'abord le cache de configuration, sinon vous testez encore les anciens réglages. Mail::raw envoie de façon synchrone : une erreur d'hôte, de port ou d'identifiant apparaît aussitôt dans le terminal, et non plus tard dans le journal de la file d'attente. Envoyez vers une adresse externe chez un grand fournisseur.

php artisan config:clear
php artisan tinker

# At the tinker prompt:
Mail::raw('Sent through the 2mail SMTP relay.', fn ($m) => $m->to('you@example.org')->subject('SMTP test'));

Les e-mails que Laravel envoie

Dès que le relais est configuré, tous ces messages passent par 2mail — vous ne devez pas les configurer un par un.

Réinitialisation de mot de passe et vérification d'adresse
Notifications et e-mails d'événements de l'application
Factures et messages liés aux abonnements
Rapports issus de tâches planifiées
Messages d'erreur vers les administrateurs

Pièges avec Laravel

La file d'attente doit tourner

Si vous placez le courrier en file sans traitement actif, rien ne part et vous ne voyez aucune erreur. En cas de problème de livraison, ce devrait être la première vérification, pas la dernière.

Le cache de configuration après une modification

Si votre application tourne avec une configuration mise en cache, les paramètres mail modifiés restent sans effet tant que ce cache n'est pas rafraîchi. Un réglage qui « ne fonctionne pas » n'est souvent tout simplement pas encore relu.

Des environnements de test qui envoient vraiment

Un environnement de staging avec une copie de la base de production peut envoyer à de vrais clients sans qu'on s'en aperçoive. Limitez-y explicitement les destinataires, ou utilisez un identifiant distinct.

Messages d'erreur fréquents avec Laravel

Les messages qui s'affichent lorsque l'hôte, le port, le chiffrement ou l'identifiant sont incorrects — cités tels quels, pour que vous les reconnaissiez dans votre journal, avec la cause et la solution en regard.

Message Cause Solution
Connection could not be established with host "relay.2mail.eu:587": stream_socket_client(): Unable to connect to relay.2mail.eu:587 (Connection timed out) Votre serveur n'atteint pas le relais. Le plus souvent, le pare-feu de votre hébergeur bloque le trafic sortant sur le port 587, ou une faute de frappe s'est glissée dans MAIL_HOST ou MAIL_PORT. Testez depuis le même serveur avec openssl s_client -starttls smtp -connect relay.2mail.eu:587. Si rien ne répond, demandez à votre hébergeur d'ouvrir le trafic sortant sur le port 587.
Connection could not be established with host "ssl://relay.2mail.eu:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:…:SSL routines::wrong version number Le scheme est réglé sur smtps (ou, dans un projet plus ancien, MAIL_ENCRYPTION=ssl). Laravel attend alors du TLS dès le premier octet, alors que le port 587 démarre en clair et ne passe en TLS qu'ensuite, via STARTTLS. Laissez MAIL_SCHEME vide ou réglez-le sur smtp ; dans un projet plus ancien, indiquez MAIL_ENCRYPTION=tls. Le port reste 587.
Failed to authenticate on SMTP server with username "…" using the following authenticators: "LOGIN", "PLAIN". … Expected response code "235" but got code "535" Le relais refuse l'identifiant : un nom d'utilisateur ou un mot de passe erroné, un mot de passe contenant une espace ou un # qui n'est pas placé entre guillemets dans .env, ou une ancienne configuration restée en cache. Placez la valeur entre guillemets doubles, exécutez php artisan config:clear et utilisez l'identifiant SMTP de votre compte 2mail — pas le mot de passe d'une boîte aux lettres.
The "tls" scheme is not supported; supported schemes for mailer "smtp" are: "smtp", "smtps". MAIL_SCHEME contient tls. Cette variable ne succède pas à MAIL_ENCRYPTION : elle ne connaît que smtp et smtps. Supprimez MAIL_SCHEME ou réglez-le sur smtp. Sur le port 587, le mailer passe de lui-même en STARTTLS.
Expected response code "250/251/252" but got code "554", with message "554 5.7.1 <noreply@example.com>: Sender address rejected" L'identifiant est correct, mais l'adresse d'expéditeur se trouve sur un domaine qui n'est pas lié à votre compte 2mail. Souvent, MAIL_FROM_ADDRESS contient encore la valeur par défaut du fichier d'exemple. Placez MAIL_FROM_ADDRESS sur une adresse d'un domaine que vous avez ajouté dans 2mail, et vérifiez qu'aucun Mailable ne définit son propre from() sur un autre domaine.
SPF, DKIM & DMARC expliqués À propos de la délivrabilité

Une autre plateforme ?

SMTP est un protocole standard : tout système qui parle SMTP — un CRM, un ERP, une application maison ou un serveur — peut envoyer via 2mail avec les mêmes cinq champs.

Questions fréquentes sur le SMTP pour Laravel

Laravel fournit la couche mail, pas la délivrabilité : celle-ci dépend du serveur par lequel vous envoyez. La configuration par défaut d'un serveur neuf fait rarement un bon expéditeur, faute d'authentification et de réputation établie.
Dans le fichier d'environnement de votre application, pas dans le code. Vous réglez le mailer sur SMTP et renseignez l'hôte, le port, le nom d'utilisateur, le mot de passe et le chiffrement. N'oubliez pas l'adresse et le nom de l'expéditeur — ce sont des réglages distincts, à côté.
Si votre application tourne avec une configuration mise en cache, les paramètres mail modifiés restent sans effet tant que ce cache n'est pas rafraîchi. Un réglage qui « ne fonctionne pas » n'est souvent tout simplement pas encore relu.
Vérifiez que la file d'attente est bien traitée. Si vous placez le courrier en file sans traitement actif, rien ne part et aucun message d'erreur n'apparaît. Ce devrait être la première vérification, pas la dernière.
Un environnement de staging avec une copie de la base de production peut envoyer à de vraies adresses sans qu'on s'en aperçoive. Limitez-y explicitement les destinataires, ou utilisez un identifiant distinct afin de suivre ce trafic séparément.
Appelez-nous
Envoyer un e-mail