2010-11-30 7 views
8

Ich versuche, E-Mails mit DKIM mit PHPMailer-Klasse zu signieren, und ich kann es nicht zum Laufen bringen.Was ist der Unterschied zwischen DomainKey-Signatur und DKIM-Signatur?

Wenn ich die Header in meinen E-Mails auf Google Mail sehe, finde ich, dass die Klasse DKIM erfolgreich in den E-Mail-Header injiziert, aber Gmail kümmert es nicht einmal.

Die Frage ist, dass ich die Header von E-Mails linkedIn gesehen habe und ich fand heraus, dass sie 2 DKIM-Header verwenden, DomainKey-Signature & DKIM-Signature.

Was ist der Unterschied? Und überprüft Gmail meine E-Mails nicht? & empfehlen Sie eine Alternative & robuste Klassen, um E-Mails mit Domain-Keys auf PHP zu signieren?

Dank

Antwort

9

Beide verwenden Public/Private Schlüssel digital E-Mails signieren. Beide verwenden eine Textdatei im DNS-Server des Absenders, die den öffentlichen Schlüssel enthält, der vom Empfänger zur Überprüfung der Signatur verwendet werden kann.

Domain Keys war die erste Version.

DKIM ist die aktualisierte Version.

Der Unterschied ist, wie Domain Keys und DKIM die Nachrichten signieren und den Header erstellen.

E-Mail-Empfänger können beide (oder beide) implementieren. Das einzige, was Sie tun können, ist mit beiden Klassen zu unterzeichnen, wenn Sie alle Basen abdecken wollen.

Möchten Sie die technischen Details zu den Unterschieden zwischen DomainKeys vs DKIM?

--Dave

+0

Dank dave für Ihre Antwort, wie signierte Header für eine E-Mail generieren? – Ryan

+0

Leider weiß ich nicht, wie man das mit PHP macht. Es tut uns leid. –

+0

Es scheint, als ob PHPMailer DKIM unterstützt. Habe es aber noch nicht getestet: http://www.worxware.com/forum/viewthread.php?tid=185 –

0

DKIM Unterstützung in PHPMailer 5.1 funktioniert nicht richtig aus dem Kasten heraus. Hier ist, was ich tun musste, um es arbeiten:

  1. ich das Update auf diese URL angewendet: http://sourceforge.net/tracker/index.php?func=detail&aid=2960165&group_id=26031&atid=385707

  2. In Zeile 566, ich hatte dies zu ändern:

    // digitally sign with DKIM if enabled 
    if ($this->DKIM_domain && $this->DKIM_private) { 
        $header_dkim = $this->DKIM_Add($header,$this->Subject,$body); 
        $header = str_replace("\r\n","\n",$header_dkim) . $header; 
    } 
    

... dazu:

// digitally sign with DKIM if enabled 
    if ($this->DKIM_domain && $this->DKIM_private) { 

    // Hack to add To: header to the headers which are passed to DKIM_Add 
      // Note that this only adds the first To: recipient, so it's going to break 
      // if you try to send an email to more than one person simultaneously 

    $header_temp = $header . $this->LE . 'To: ' . $this->to[0][0]; 
    $header_dkim = $this->DKIM_Add($header_temp,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body); 
    $header = str_replace("\r\n","\n",$header_dkim) . $header; 
    }