SMTP pour Drupal — les e-mails de votre site qui arrivent
Par défaut, Drupal envoie ses e-mails via la fonction mail de PHP du serveur web : sans authentification et sans réputation établie. Pour Gmail et Outlook, un tel message se distingue à peine du spam — des activations de compte et des e-mails de réinitialisation qui n'arrivent pas, voilà la plainte classique.
La solution propre est le module SMTP de Drupal. Il remplace le transport par défaut par une connexion à un serveur SMTP externe, sans que vous deviez toucher à vos autres modules ou formulaires. Les cinq champs ci-dessous sont tout ce dont le module a besoin.
Pourquoi cela coince sans relais
Un site Drupal est souvent plus qu'un site web : un portail pour les membres, un intranet, un formulaire de demande d'une association ou d'une administration. C'est précisément là que les e-mails sont indispensables — celui qui s'inscrit et ne reçoit pas d'e-mail d'activation abandonne, et personne ne vous le signale. Le message part bel et bien, mais il est refusé en route parce que rien ne prouve qu'il vient de votre domaine.
Configurer le SMTP dans Drupal
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.
Compléter dans Drupal
Installez et activez le module SMTP de Drupal. Dans les réglages de ce module, vous l'activez comme transport, vous renseignez l'hôte, le port, le chiffrement, le nom d'utilisateur et le mot de passe, et vous placez l'adresse d'expéditeur sur votre propre domaine. Le module intègre un e-mail de test : envoyez-le vers une adresse externe chez un grand fournisseur, pas vers une adresse sur votre propre serveur.
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.
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 Drupal 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. |
| Port | Le port correspondant au chiffrement que vous avez choisi ; votre compte indique lequel. |
| Chiffrement | TLS. N'envoyez jamais sans chiffrement — vos identifiants circuleraient sinon en clair sur le réseau. |
| Nom d'utilisateur | L'identifiant SMTP de votre compte 2mail. |
| Mot de passe | Le mot de passe correspondant. N'utilisez jamais le mot de passe de la boîte aux lettres d'un collaborateur. |
Configuration SMTP pour Drupal 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.
Installer le module SMTP
Le module s'appelle en toutes lettres SMTP Authentication Support et s'installe avec Composer, comme tout module Drupal aujourd'hui. Vous trouvez ensuite ses réglages dans l'administration, sous la configuration du système.
composer require drupal/smtp
drush en smtp -y Réglages et mot de passe via settings.php
Vous pouvez tout renseigner dans le formulaire du module, mais le mot de passe se retrouve alors dans la configuration — et, avec un export de configuration, dans le gestionnaire de versions. Une surcharge dans settings.php l'emporte sur la valeur enregistrée, reste hors de l'export et vous permet d'utiliser un identifiant différent par environnement. Le mot de passe lui-même provient d'une variable d'environnement sur le serveur. Choisissez TLS comme protocole : dans ce module, cela signifie STARTTLS, qui va de pair avec le port 587 ; l'option SSL est destinée au port 465.
// sites/default/settings.php (or settings.local.php per environment)
// Route all Drupal mail through the SMTP module.
$config['system.mail']['interface']['default'] = 'SMTPMailSystem';
$config['smtp.settings']['smtp_on'] = TRUE;
$config['smtp.settings']['smtp_host'] = 'relay.2mail.eu';
$config['smtp.settings']['smtp_port'] = '587';
$config['smtp.settings']['smtp_protocol'] = 'tls'; // "Use TLS" in the form = STARTTLS
$config['smtp.settings']['smtp_username'] = getenv('SMTP_USERNAME');
$config['smtp.settings']['smtp_password'] = getenv('SMTP_PASSWORD');
$config['smtp.settings']['smtp_from'] = 'noreply@example.com';
$config['smtp.settings']['smtp_fromname'] = 'Example'; Contrôler avec Drush
Les surcharges de settings.php n'apparaissent pas dans le formulaire : celui-ci affiche la valeur enregistrée. Demandez donc à Drush ce qui est réellement en vigueur, puis envoyez l'e-mail de test que le module propose au bas de sa page de réglages. S'il échoue, la véritable cause se trouve dans le journal, pas à l'écran.
drush cache:rebuild
# Which mail system is active, and which host does Drupal really use?
drush config:get system.mail interface.default --include-overridden
drush config:get smtp.settings smtp_host --include-overridden
# What the module logged about failed deliveries (needs the dblog module):
drush watchdog:show --type=smtp Les e-mails que Drupal envoie
Dès que le relais est configuré, tous ces messages passent par 2mail — vous ne devez pas les configurer un par un.
Pièges avec Drupal
Le module doit réellement être le mailer
Drupal peut faire cohabiter plusieurs systèmes de messagerie. Si le module SMTP est installé mais pas activé comme transport, tout continue de passer par la fonction mail de PHP et rien ne change. Vérifiez cela en premier lorsque l'e-mail de test arrive mais pas les vrais e-mails.
Expéditeur sur votre propre domaine
L'adresse e-mail du site figure dans les réglages de base et sert d'expéditeur. Placez-la sur une adresse de votre propre domaine — le même domaine pour lequel SPF, DKIM et DMARC sont configurés. Une adresse gratuite échoue au DMARC, aussi corrects que soient les paramètres SMTP.
Export de configuration et mots de passe
Si vous travaillez avec la gestion de configuration, les réglages SMTP voyagent dans l'export. Si un import les écrase avec les valeurs d'un environnement de test, votre site en production envoie soudain avec de mauvaises données. Gardez le mot de passe hors de l'export et définissez-le séparément par environnement.
Messages d'erreur fréquents avec Drupal
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 |
|---|---|---|
Unable to send email. Contact the site administrator if the problem persists. | C'est le message générique de Drupal lui-même, qui dit seulement que l'envoi a échoué. La véritable erreur SMTP se trouve dans le journal, sous le type smtp. | Ouvrez les entrées récentes du journal dans l'administration ou utilisez drush watchdog:show --type=smtp, et cherchez-y l'un des messages ci-dessous. |
SMTP Error: Could not connect to SMTP host. | Le serveur n'atteint pas le relais, ou le protocole et le port ne correspondent pas : SSL choisi sur le port 587, une faute de frappe dans l'hôte, ou un hébergeur qui bloque le trafic sortant sur le port 587. | Réglez le protocole sur TLS et le port sur 587. Si l'échec persiste, testez depuis le serveur avec openssl s_client -starttls smtp -connect relay.2mail.eu:587 et demandez à votre hébergeur d'ouvrir le port. |
SMTP Error: Could not authenticate. | Le relais refuse l'identifiant : un nom d'utilisateur ou un mot de passe erroné, ou une variable d'environnement vide au sein du serveur web, si bien que la surcharge transmet un mot de passe vide. | Vérifiez que getenv('SMTP_PASSWORD') renvoie bien une valeur au sein du serveur web, et utilisez l'identifiant SMTP de votre compte 2mail — pas le mot de passe d'une boîte aux lettres. |
SMTP Error: The following recipients failed: … | L'identifiant est correct, mais le relais refuse le message au moment où le destinataire est indiqué — en pratique parce que l'adresse d'expéditeur se trouve sur un domaine qui n'est pas lié à votre compte 2mail. Souvent, l'adresse e-mail du site est encore une adresse de l'hébergeur ou une adresse gratuite. | Placez à la fois l'adresse d'expéditeur dans le module et l'adresse e-mail du site dans les réglages de base sur une adresse d'un domaine que vous avez ajouté dans 2mail. |
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.