Par défaut, les emails envoyés par WordPress (notification de nouveau commentaire, réinitialisation de mot de passe, confirmation de commande sur une boutique) partent avec un expéditeur générique du type wordpress@nom-de-domaine.fr, en texte brut, sans aucune mise en forme. C’est fonctionnel, mais rarement présentable, et souvent mal reçu par les filtres antispam des grands fournisseurs.
La fonction wp_mail(), qui centralise tous les envois d’emails sous WordPress, expose une série de filtres qui permettent de reprendre la main sur l’expéditeur, le format, et la fiabilité de la livraison, sans dépendre systématiquement d’une extension complète.
Changer l’expéditeur par défaut
Les filtres wp_mail_from et wp_mail_from_name permettent de définir une adresse et un nom d’expéditeur cohérents avec l’identité du site :
add_filter( 'wp_mail_from', function() {
return 'contact@example.com';
} );
add_filter( 'wp_mail_from_name', function() {
return 'Boutique Example';
} );
Attention : changer l’adresse d’expéditeur ne suffit pas à garantir la délivrabilité si le domaine n’a pas les enregistrements DNS adéquats (SPF, DKIM). L’adresse doit appartenir à un domaine réellement configuré pour envoyer des emails, sous peine de voir les messages rejetés ou classés en spam.
Passer les emails en HTML
Par défaut, wp_mail() envoie du texte brut. Le filtre wp_mail_content_type autorise le HTML, ce qui permet une mise en forme cohérente avec la charte du site :
add_filter( 'wp_mail_content_type', function() {
return 'text/html';
} );
Ce filtre doit être retiré juste après l’envoi si certains emails doivent rester en texte brut, car il s’applique globalement à tous les appels de wp_mail() tant qu’il reste actif :
function activer_html_email() {
add_filter( 'wp_mail_content_type', 'get_html_content_type' );
}
function get_html_content_type() {
return 'text/html';
}
function desactiver_html_email() {
remove_filter( 'wp_mail_content_type', 'get_html_content_type' );
}
add_action( 'phpmailer_init', 'desactiver_html_email' );

Créer un gabarit HTML réutilisable
Plutôt que d’écrire le HTML directement dans chaque appel de wp_mail(), il est plus propre de centraliser un gabarit d’email, avec l’en-tête et le pied de page du site, et de n’injecter que le contenu variable :
function envoyer_email_notification( $destinataire, $sujet, $contenu ) {
$corps = '<div style="font-family: Arial, sans-serif; max-width: 600px;">';
$corps .= '<h1>' . esc_html( get_bloginfo( 'name' ) ) . '</h1>';
$corps .= $contenu;
$corps .= '<p style="color: #888; font-size: 12px;">Cet email a été envoyé automatiquement, merci de ne pas y répondre.</p>';
$corps .= '</div>';
add_filter( 'wp_mail_content_type', 'get_html_content_type' );
wp_mail( $destinataire, $sujet, $corps );
remove_filter( 'wp_mail_content_type', 'get_html_content_type' );
}
Personnaliser un email natif précis
WordPress propose des filtres ciblés pour certains emails système, comme la notification de nouveau mot de passe. Le filtre wp_new_user_notification_email permet de reprendre le contenu de cet email spécifique sans toucher à tous les autres :
add_filter( 'wp_new_user_notification_email', function( $wp_new_user_notification_email, $user, $blogname ) {
$wp_new_user_notification_email['subject'] = sprintf( 'Bienvenue sur %s', $blogname );
return $wp_new_user_notification_email;
}, 10, 3 );
Pourquoi passer par un vrai serveur SMTP
La fonction mail() de PHP, utilisée par défaut par wp_mail() en l’absence de configuration spécifique, est de plus en plus souvent bloquée ou fortement pénalisée par les filtres antispam, en particulier sur les hébergements mutualisés dont l’IP est partagée entre de nombreux sites. Passer par un serveur SMTP authentifié (celui d’un fournisseur d’email transactionnel, ou celui de l’hébergement lui-même) améliore nettement la délivrabilité.
Le hook phpmailer_init permet de configurer PHPMailer, la bibliothèque utilisée en coulisses par wp_mail(), pour router les envois via SMTP :
add_action( 'phpmailer_init', function( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'smtp-user';
$phpmailer->Password = 'smtp-password';
$phpmailer->SMTPSecure = 'tls';
} );
Stocker le mot de passe SMTP en clair dans le code n’est pas recommandé : une constante dans wp-config.php, hors du dépôt versionné, reste la solution la plus sûre.
Vérifier ce qui part réellement
- Utiliser un outil de test de délivrabilité pour vérifier le score spam d’un email envoyé
- Vérifier que les enregistrements SPF et DKIM du domaine correspondent au serveur d’envoi utilisé
- Tester l’affichage HTML sur plusieurs clients mail, dont certains rendent le CSS de façon très partielle
Un email transactionnel qui atterrit en spam est un email qui n’existe pas pour l’utilisateur. La délivrabilité mérite autant d’attention que la mise en forme.
En résumé
Reprendre en main les emails WordPress ne demande pas forcément une extension complète : les filtres natifs de wp_mail() couvrent l’expéditeur, le format HTML et le contenu des emails système. Le point le plus souvent négligé reste la délivrabilité : sans un vrai serveur SMTP authentifié, même l’email le mieux mis en forme risque de ne jamais atteindre la boîte de réception du destinataire.