Bonjour à tous et à toutes. Nombreux sont ceux qui rencontrent des problèmes sur ce genre de technologies et les réponses ne courent pas les pages internet... Voici donc le problème que je vous énonce

Je désire, par le biais de PHPMailer, envoyé par SMTP (par un compte gmail) un mail signé par DKIM
Passant par cette messagerie et envoyant un mail directement à check-auth2@verifier.port25.com, celui ci me dit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   pass
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham

Or, lorsque j'essaye d'envoyer un mail par le biais de PHPMailer, tout d'abord en envoyant un message avec isHTML(), il me renvoit

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
----------------------------------------------------------
DKIM check details:
----------------------------------------------------------
Result:         fail (wrong body hash: expected d9/33fwdFUC2QFjBLdJ+eUAUOkI=)
ID(s) verified:
Voici l'intégralité des données à savoir. Ma clé publique et privée sont bien liées

DNS : alpha._domainkey.mondomaine.com IN TXT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
v=DKIM1; t=y; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVZFTP7HGt2vP24vr1sbhdYD187wih1hAW9jmOw1dn6stOEd47nxEP/L6reGVhrl7bZMUZymdJAXWMF9WMAMEXq3rpxYppgZsliRMnqXv3U3a36UIL1UT+9EiicY3F/smiP2udEoXa6yVA1qaTMOmU0XjAcCAhfIr4DeHcBXjV8QIDAQAB
DKIM Signature
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Canonicalized Headers:
   mime-version:1.0'0D''0A'
   date:Tue,'20'7'20'Jun'20'2011'20'12:25:56'20'+0200'0D''0A'
   message-id:290e94045cd61bb797269dc58ed9dd24'0D''0A'
   subject:test'0D''0A'
   from:"election@mondomaine.com"'20'<election@mondomaine.com>'0D''0A'
   to:check-auth2@verifier.port25.com'0D''0A'
   content-type:text/plain;'20'charset="iso-8859-1"'0D''0A'
   dkim-signature:v=1;'20'a=rsa-sha1;'20'q=dns/txt;'20'l=10;'20's=alpha;'20't=1307442356;'20'c=relaxed;'20'h=mime-version:x-originating-ip:date:message-id:subject:from:to:content-type;'20'd=mondomaine.com;'20'i=election@mondomaine.com;'20'z=From:=20"election@mondomaine.com"=20<election@mondomaine.com>'20'|To:=20check-auth2@verifier.port25.com'20'|Subject:=20test;'20'bh=rW0noVoasYkysD56sSWhUbVPniU=;'20'b=
Vous noterez ici que l'attribut b n'est pas renseigné alors que dans le mail original :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
X-PHPMAILER-DKIM: phpmailer.worxware.com
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=10; s=alpha;
       t=1307442356; c=relaxed;
       h=mime-version:x-originating-ip:date:message-id:subject:from:to:content-type;
       d=mondomaine.com; i=election@mondomaine.com;
       z=From:=20"election@mondomaine.com"=20<election@mondomaine.com>
       |To:=20check-auth2@verifier.port25.com
       |Subject:=20test;
       bh=rW0noVoasYkysD56sSWhUbVPniU=;
       b=HCjg5YB5QOfxHLHhVzwYI6jTeMtXf8t/JCLrqp/WPdgpurEr0UwVsdMNY3Byo/qik6SLJPMrUDvY58aABuIV8DJhRR3jds/ekLfMEwn1TvTfdHDM1amLiEOOW6+lAqvzUjJ5qSzWkKAauwfLg27s5N02ofXgjOgKojMfOcNwmN4=
Appel de la fonction PHP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Envoi du mail via MySMTP.eu
   // Chargement de la bibliothèque phpmailer
      require_once("class_phpmailer/phpmailer.php5");
      require_once("class_phpmailer/smtp.php5"); 
   // Chargement des paramètres de connexion à gmail
      $mail             = new PHPMailer();
      $mail->IsSMTP();
      $mail->SMTPAuth = true;
      $account = fnct_app_constant_get('smtp_dk_login');
      $password = SMTP_PWD; // Définit en temps que constante
      $mail->Host       = '81.19.234.29';  //*'mysmtp.eu';
      $mail->Port        = 587;
      $mail->Username = $account;
      $mail->Password = $password;		 
      $mail->From       = $account;
   // Chargement des entêtes du mail
      $mail->FromName = 'election@mondomaine.com';
      $mail->Subject    = Test;
      $mail->WordWrap = 75;
      $mail->AddReplyTo($account,'election@mondomaine.com');
      $mail->AddAddress('check-auth2@verifier.port25.com');
   // Ajout de la signature DKIM
      $mail->DKIM_selector = 'alpha';
      $mail->DKIM_identity = $mail->From;
      $mail->DKIM_domain   = 'mondomaine.com';
      $mail->DKIM_private  = 'parametre/dkim_private.key'; // Fichier contenant la clé format PEM
      $mail->DKIM_passphrase = '';
   // Génération d'un identifiant de suivi
      $msgID = md5(mt_rand(0, 32).time());
      $mail->MessageID = $msgID;
   // Chargement du contenu HTML
      $html_content = '<b>Test de mail</b>';
      $mail->MsgHTML($html_content);
      $mail->AltBody = 'Test de mail';
      $mail->IsHTML(true);
      $mail->TransportId = $msgID;
 
  // Envoi du mail
      $sent = $mail->Send();
      if($sent) {
          echo "Le message a été envoyé";
      } else {
          echo "Le message n'a pas été envoyé";
      };
// Fin de la fonction
Voici donc les questions que je me pose :

1) Que dois-je modifier pour faire en sorte que ma signature passe enfin sur un mail généré par PHPMailer ?

2) Comment se fait-il que la version canonicalized des headers ne contienne pas l'attribut b, étant pourtant la signature en elle même.
Edit : en réfléchissant un peu il est logique que cet attribut soit vide. vu qu'il s'agit de la signature du header jusqu'au '... b=' il ne peut pas être pris en compte dans la canonicalization du header ou le test de la signature sera forcément faux.