Comment améliorer l’envoi d’emails sur les sites WordPress
Si vous utilisez la fonction PHP mail() par défaut pour envoyer des emails via WordPress, vous pourriez rencontrer des problèmes de délivrabilité ou de serveur, en particulier avec un volume d’envoi élevé. Heureusement, il existe une méthode plus fiable. Avec les bonnes solutions, vous pouvez utiliser à la place des serveurs SMTP (Simple Mail Transfer Protocol).
Pour toutes ses communications par email, WordPress dispose d’une fonction spéciale appelée wp_mail() qui, dans un environnement par défaut, utilise la phpMailer bibliothèque open source pour construire l’email, définir les en-têtes appropriés, gérer les versions HTML et texte brut, puis placer l’email en file d’attente pour la livraison. En coulisses, phpMailer utilise par défaut la fonction PHP intégrée appelée mail().
Sur la plupart des systèmes, la fonction mail() de PHP appelle simplement l’exécutable défini dans la directive de configuration sendmail_path. Ce programme lit l’entrée standard pour les en-têtes, le corps de l’email, les pièces jointes, etc., et effectue diverses vérifications. Par exemple, il vérifie que l’adresse du destinataire est valide.
Si tout semble correct, selon la configuration du système, ce programme enverra généralement l’email via un serveur SMTP local ou le placera dans une file d’attente pour être traité ultérieurement par le serveur SMTP local.
Malheureusement, cette méthode n’est pas optimale pour la délivrabilité des emails ou l’envoi de gros volumes.
Le problème avec la façon dont WordPress envoie les emails

Placer l’email en file d’attente pour le serveur SMTP local est assez efficace puisque la fonction mail() de PHP peut renvoyer une réponse immédiatement, sans avoir à attendre que le message soit réellement envoyé.
Cependant, le serveur SMTP local lui-même peut rapidement devenir un goulot d’étranglement. En effet, il peut avoir à communiquer avec des centaines d’agents de transfert de courrier (MTA) tiers et garder une trace de chaque email, réessayer l’envoi en cas d’échec, etc. Cela peut représenter beaucoup de travail pour un serveur qui n’a pas été conçu pour être un serveur de messagerie.
Et ce n’est qu’une partie du problème. Le second problème, plus important, est la délivrabilité. Vous remarquerez qu’une grande partie des emails envoyés directement depuis les serveurs web se retrouveront souvent dans le dossier spam, en raison d’une configuration incorrecte ou incomplète des protocoles d’authentification des emails (SPF, DKIM, etc.) qui peuvent être difficiles à configurer. La réputation de l’adresse IP du serveur web jouera également un rôle énorme dans la délivrabilité.
Et dans les environnements d’hébergement mutualisé, c’est encore plus délicat, car vous n’avez (généralement) qu’un seul serveur SMTP, mais plusieurs domaines, adresses d’expédition et signatures, ce qui est vraiment difficile à paramétrer correctement, et encore plus difficile à maintenir propre pour empêcher les abus.
C’est pourquoi la plupart des fournisseurs d’hébergement, en particulier pour les services d’hébergement WordPress gérés, limitent le débit et filtrent tous les emails sortants. Ce n’est pas très pratique, surtout dans le e-commerce, où l’email est plus fréquent et si crucial pour le succès : paniers abandonnés, listes de souhaits, offres spéciales, etc.
La majorité des plateformes d’hébergement recommanderont d’utiliser un service d’emailing transactionnel tiers, tel que Mailgun, pour résoudre tous ces problèmes.
Les avantages d’un service d’emailing transactionnel
Mailgun et d’autres services d’email transactionnel se chargeront de livrer les emails aussi rapidement et efficacement que possible. Ils définiront les en-têtes d’email appropriés, les signatures, etc., et vous conseilleront sur la configuration des enregistrements DNS corrects pour vos domaines, ce qui améliore les chances que vos messages atteignent les boîtes de réception des destinataires.
Mailgun propose également une multitude de fonctionnalités supplémentaires, telles que la validation des emails, les vérifications de réputation, la journalisation, les statistiques, l’A/B testing, et bien plus encore.
Il ne vous reste plus qu’à transférer le message de votre application WordPress vers la file d’attente de Mailgun. Il existe plusieurs façons de procéder.

La communauté de développement WordPress connaît généralement bien le concept d’actions et de filtres sur WordPress, et la création d’un petit plugin personnalisé incontournable serait le moyen le plus simple et le plus rapide de démarrer avec Mailgun :
add_action( 'phpmailer_init', function( $m ) {rnrnt$m->Host = 'smtp.mailgun.org';rnrnt$m->Port = 587;rnrnt$m->Username = 'postmaster@yourdomain.org';rnrnt$m->Password = 'your secret password';rnrnt$m->isSMTP();rnrnt$m->SMTPAuth = true;rnrnt$m->SMTPSecure = 'tls';rnrn} );rn
Cela crée une fonction liée à l’action phpmailer_init dans WordPress, qui configure la bibliothèque phpMailer pour envoyer des emails en utilisant un serveur SMTP externe. Le nom d’utilisateur et le mot de passe peuvent être obtenus (ou réinitialisés) dans votre tableau de bord Mailgun.
Une fois actif, cet extrait de code empêchera phpMailer d’utiliser la fonction mail() de PHP et acheminera tous les emails sortants vers les serveurs SMTP de Mailgun. Vous pouvez le vérifier en vous envoyant un email de récupération de mot de passe par exemple, et en consultant la section Logs de votre tableau de bord Mailgun.

Comment utiliser un plugin WordPress SMTP
Créer votre propre petit plugin n’est pas toujours la meilleure option, surtout pour quelqu’un qui ne connaît pas le langage de programmation PHP ou le fonctionnement des actions et des filtres WordPress. L’approche alternative consiste à utiliser un plugin prêt à l’emploi.
rnadd_action( 'phpmailer_init', function( $m ) {rnrnt$m->Host = 'smtp.mailgun.org';rnrnt$m->Port = 587;rnrnt$m->Username = 'postmaster@yourdomain.org';rnrnt$m->Password = 'your secret password';rnrnt$m->isSMTP();rnrnt$m->SMTPAuth = true;rnrnt$m->SMTPSecure = 'tls';rnrn} );rn
Le plugin de Mailgun est une excellente option qui, en plus de l’envoi via SMTP, peut également envoyer des messages sortants en utilisant l’API HTTP de Mailgun. C’est particulièrement utile pour les environnements d’hébergement mutualisé où toute communication SMTP sortante est simplement bloquée pour éviter les abus.
Les identifiants API se trouvent également dans votre tableau de bord Mailgun.
Il existe également d’autres options de plugins SMTP qui peuvent s’avérer utiles si vous souhaitez envoyer vos emails via un serveur SMTP tiers autre que Mailgun.
Considérations de performance et alternatives
Une chose à garder à l’esprit : lorsque vous utilisez ces plugins ou extraits de code pour que WordPress livre les emails à un service SMTP tiers, vous compromettez les performances de l’application.
Au lieu de simplement transmettre du texte à l’exécutable système sendmail local, ces plugins obligent WordPress à effectuer beaucoup plus de travail. Cela inclut l’ouverture d’une nouvelle connexion, l’exécution d’un handshake TLS et l’authentification SMTP avec un service externe tiers. Pour l’envoi de gros volumes, cela peut ne pas être une option du tout, ne serait-ce qu’à cause du facteur de latence.
Il existe une description très détaillée de ces problèmes de performance dans l’article wp_mail() is not broken, où nous avons utilisé le profiler Sail WordPress pour mesurer le temps nécessaire à l’envoi de 20 emails. Les plugins SMTP se sont révélés jusqu’à 90 fois plus lents que la méthode sendmail par défaut.
La meilleure alternative consiste à utiliser une combinaison d’une file d’attente locale et d’un service d’emailing transactionnel. Cela peut être fait en utilisant un MTA local, tel que Postfix, dans un mode relais SMTP, où il agira comme un serveur SMTP local. Mais tout ce qu’il reçoit sera simplement relayé vers le service tiers, tel que Mailgun.
Cela garantit que WordPress n’a pas à effectuer de lourdes tâches lors de l’envoi d’emails et améliore également la délivrabilité des emails en les envoyant via Mailgun.
Gardez à l’esprit que cette méthode implique que vous aurez besoin de privilèges de niveau root pour installer et configurer ce logiciel sur votre serveur. Cela demande donc un peu plus de travail qu’un simple plugin WordPress. Cependant, si vous utilisez Sail pour déployer et gérer WordPress sur DigitalOcean, vous pouvez obtenir cette configuration exacte dans un seul blueprint :
rnsail blueprint mailgun.yamlrn
Ce blueprint installera et configurera une instance Postfix sur votre serveur, pour relayer les emails vers les serveurs SMTP de Mailgun. Il vous sera demandé le nom d’utilisateur et le mot de passe SMTP, que vous pouvez obtenir ou réinitialiser depuis votre tableau de bord Mailgun.
Si vous n’utilisez pas Sail et préférez procéder manuellement, voici un excellent guide sur la façon de configurer un relais local avec Postfix sur Ubuntu Linux.
Choisissez une méthode fiable pour envoyer des emails avec WordPress
Pour de nombreuses entreprises, l’email est un élément vital de l’activité. Il est nécessaire de disposer d’une méthode fiable pour l’envoi de messages, en particulier pour les emails transactionnels. Si vous expédiez de gros volumes, l’équipe de développement devrait envisager des solutions d’emailing WordPress autres que l’option par défaut.
L’un des grands avantages de l’utilisation de solutions open source comme WordPress est que l’équipe de développement a accès à toutes sortes de ressources, y compris des plugins et des solutions gratuites. La combinaison de Mailgun et de l’interface de ligne de commande (CLI) Sail est un excellent exemple de la façon dont l’équipe de développement peut faire évoluer les applications WordPress et implémenter une meilleure façon d’envoyer des emails via la plateforme.
Konstantin Kovshenin est un contributeur du noyau WordPress, un conférencier et un développeur de plugins, expert en performance, mise à l’échelle et sécurité WordPress.
Comment configurer Mailgun via SMTP avec les filtres WordPress