Objectif
Remplacer l’envoi PHP local par un transport SMTP authentifié et maintenable, en utilisant une identité dédiée, en alignant l’adresse From avec le compte ou alias autorisé, en conservant l’adresse du visiteur dans Reply-To et en vérifiant la délivrabilité ainsi que les erreurs SMTP réelles.
Prérequis
- Adresse d’expédition dédiée ou alias autorisé sur le domaine du site.
- Hôte SMTP, port, méthode TLS, identifiant et méthode d’authentification fournis par le service de messagerie.
- Accès DNS
- Un seul plugin SMTP maintenu ou un développement contrôlé via phpmailer_init.
- Boîte de test interne et externe pour vérifier la délivrabilité.
Procédure pas à pas
Documenter l’envoi actuel
Identifiez les plugins qui appellent wp_mail, les formulaires, notifications WooCommerce ou autres extensions et l’adresse From réellement utilisée. Envoyez un message témoin avant changement et conservez ses en-têtes. Cette base permet de repérer une régression de Reply-To, de nom d’expéditeur ou de délivrabilité après migration.
wp plugin list --status=active
- Une seule chaîne d’envoi actuelle est identifiée et les formulaires critiques sont listés.
Créer une identité SMTP dédiée
Préférez une adresse du type site@domaine.tld ou notifications@domaine.tld. Le compte ne doit pas être un compte personnel d’administrateur. Vérifiez si le fournisseur autorise des alias From différents ; sinon utilisez exactement l’identité authentifiée. Activez MFA sur le compte lorsque le fournisseur le permet sans casser l’authentification applicative.
- L’identité existe et ses droits sont limités à l’envoi nécessaire.
Choisir le transport et le chiffrement
Utilisez les paramètres officiels du fournisseur. Les configurations courantes sont 465 avec TLS implicite ou 587 avec STARTTLS, mais ne devinez pas : appliquez le port et le mode documentés. Vérifiez que le serveur web peut établir la connexion sortante et que l’hébergeur ne bloque pas le port.
openssl s_client -starttls smtp -connect <SMTP-HOST>:587 -servername <SMTP-HOST> </dev/null
- La connexion TLS au serveur SMTP s’établit depuis l’hébergement.
Configurer un seul plugin SMTP ou PHPMailer
Dans un plugin SMTP, renseignez host, port, chiffrement, authentification et compte. Si vous utilisez du code, WordPress expose le hook phpmailer_init pour configurer l’instance PHPMailer ; gardez toutefois les secrets hors du code source. L’objectif est que wp_mail continue d’être utilisé par les extensions tout en changeant le transport sous-jacent.
- wp_mail est transporté par le SMTP choisi sans second plugin concurrent.
Forcer un From conforme et un Reply-To utilisateur
Configurez le From global sur l’adresse SMTP ou un alias explicitement autorisé. Dans les formulaires, placez l’adresse du visiteur dans Reply-To. Vérifiez aussi l’envelope sender/Return-Path selon les possibilités du fournisseur. Cette séparation réduit les rejets Sender mismatch et améliore l’alignement DMARC.
- From appartient au domaine autorisé et Reply-To contient l’adresse du visiteur lorsque nécessaire.
Vérifier SPF, DKIM et DMARC
Contrôlez que le fournisseur d’envoi est inclus dans SPF, que DKIM signe les messages avec le bon domaine et que DMARC est cohérent avec les identités utilisées. Ne créez pas plusieurs enregistrements SPF TXT concurrents. Utilisez les résultats d’authentification d’un message reçu pour valider plutôt qu’un simple contrôle DNS.
nslookup -type=TXT domaine.tld
nslookup -type=TXT <SELECTOR>._domainkey.domaine.tld
nslookup -type=TXT _dmarc.domaine.tld
- Le message de test obtient des résultats SPF/DKIM/DMARC attendus.
Envoyer des tests fonctionnels
Utilisez la fonction de test du plugin puis déclenchez les vrais formulaires et notifications. Testez une adresse interne et une externe. Contrôlez sujet, From, Reply-To, encodage, pièces jointes et liens. Une réussite du bouton Test Email n’est pas suffisante si Contact Form ou WooCommerce construisent des en-têtes différents.
- Chaque flux métier envoie avec le même transport et les bons en-têtes.
Diagnostiquer un rejet SMTP
Conservez le code exact 4xx/5xx, le texte du serveur et l’heure. Un 535 pointe vers l’authentification, un 550 peut indiquer une politique de destinataire ou d’expéditeur, et un Sender mismatch impose de comparer l’identité authentifiée, From et Return-Path. Ne changez pas simultanément port, TLS et compte sans isoler la cause.
- Les erreurs sont analysées à partir du code serveur et non d’un message générique du plugin.
Limiter les logs et documenter la rotation
Activez une journalisation suffisante pour le support, mais évitez de conserver indéfiniment corps de messages, adresses sensibles ou pièces jointes. Documentez l’adresse SMTP, le propriétaire du compte, la méthode de renouvellement du secret et les DNS associés. Planifiez un test après changement de mot de passe ou de fournisseur.
- Le SMTP est maintenable sans exposer inutilement des données ou secrets.
Validation
La procédure est validée lorsque :
- Le site envoie depuis l’identité autorisée et Reply-To fonctionne sur les formulaires.
- Les tests réels arrivent sur au moins deux domaines sans rejet SMTP.
- SPF/DKIM/DMARC sont cohérents avec le fournisseur et le domaine d’expédition.
- Le journal permet de retrouver un échec sans conserver excessivement le contenu des messages.
Retour arrière
- Désactiver le nouveau transport SMTP et réactiver l’ancien uniquement si celui-ci était fonctionnel et acceptable.
- Restaurer le From/Reply-To précédents si une application dépendait d’un comportement spécifique.
- Révoquer le mot de passe d’application ou secret créé pour le pilote s’il n’est plus utilisé.
- Conserver les en-têtes et logs des tests pour comparer avant une nouvelle tentative.
Dépannage / erreurs fréquentes
- 535 Authentication failed : vérifier identifiant, mot de passe d’application, SMTP AUTH et politiques du fournisseur.
- 550 Sender mismatch : aligner le compte authentifié, From et alias/Return-Path autorisés.
- Test plugin OK mais formulaire KO : inspecter les en-têtes ajoutés par le plugin de formulaire.
- Connexion impossible au port : tester la sortie réseau depuis l’hébergement et le mode TLS exact.
- Messages en spam : analyser SPF/DKIM/DMARC, réputation et contenu plutôt que changer aléatoirement de port.