Signer vos emails transactionnels

2015févr.12

Rien de plus frustrant que vos emails transactionnels qui n’arrivent pas à destination. Pour améliorer cette délivrabilité, nous allons voir comment utiliser la signature DKIM lors de vos envois via phpmailer.

Génération des clefs privée et publique avec openssl

Pour créer votre paire de clefs privée / publique, vous pouvez utiliser openssl en ligne de commande sous linux. Pour cela :

openssl genrsa -out ma_clef.priv 1024
openssl rsa -in ma_clef.priv -out ma_clef.pub -pubout

Vous obtenez alors 2 fichiers :

  • ma_clef.priv : qui sera utiliser par phpmailer, postfix pour ajouter la signature à vos emails
  • ma_clef.pub : qui sera utilisé par les serveurs de messagerie à réception de vos emails pour vérifier l’authenticité de cette signature

Ajout de votre clef public dans la zone DNS de votre nom de domaine

Une fois vos 2 clefs générées, il faut diffuser votre clef publique au serveurs de messagerie. Pour cela DKIM utilise un enregistrement TXT dans la zone DNS de votre nom de domaine. Pour cela, il faut ajouter dans votre zone DNS un enregistrement du genre :

clef._domainkey TXT « k=rsa,p=CLEF_SUR_UNE_LIGNE »

La valeur CLEF_SUR_UNE_LIGNE doit être remplacé par le contenu situé entre —–BEGIN RSA PRIVATE KEY—– et —–END RSA PRIVATE KEY—– de votre fichier ma_clef.pub en enlevant les retours chariots.

Ajout de la signature à vos emails envoyés par phpmailer

Maintenant tout est prêt pour l’envoi, vos clefs sont générés, et tout est prêt pour la réception, votre clef publique est diffusée grâce à votre zone DNS (attente le délai de propagation si besoin). Il ne vous reste plus qu’à ajouter la signature à vos emails.

Si vous utilisez phpmailer dans vos application php, vous pouvez, avant d’appeler la méthode « send », demander l’ajout de la signature à votre mail. Pour cela :

<?php
 //ajout de la signature
 $mail->DKIM_identity=$mail->From;
 $mail->DKIM_domain=substr(strrchr($mail->From, '@'), 1);
 $mail->DKIM_private='CHEMIN_VERS_MA_CLEF.PRIV';
 $mail->DKIM_selector='clef'._domainkey';
 //envoi le mail
 $mail->send();
?>

Contrôle de la signature 

Pour contrôler que votre mail a bien été signé, vous pouvez lorsque que le recevez voir (dans gmail par exemple) :

  • Envoyé par : votredomaine
  • Signé par : votredomaine

signature

Commentaires

 Clément Levallois
 18000 Bourges
 SIRET : 81783887300021