Frage

Es sieht aus wie es einige großen Bibliotheken da draußen ist Domain zu tun Unterzeichnung von E-Mail auf C # /. NET, aber ich habe eine wirklich harte Zeit für PHP die gleiche Art von Unterstützung zu finden. Vielleicht suchen Ich bin nicht an der richtigen Stelle?

Das einzige, das ich gefunden http://php-dkim.sourceforge.net/ ; es sieht unglaublich Hacky und unterstützt nur PHP4. Bedenkt man, wie beliebt PHP ist und wie kritisch DomainKey sind für E-Mail-Klassifizierung als Spam, würde ich bessere Tools erwarten; Sie wissen, welche? Alle anderen Tricks, die Sie empfehlen würden?

Zusätzliche Informationen:. Ich bin mit einem externen SMTP-Anbieter, weil ich Tausende von E-Mails pro Tag verschicken müssen

War es hilfreich?

Lösung

würde ich DKIM Unterstützung bei der MTA-Ebene empfehlen, so dass alle Ihre Server generierten E-Mail für eine bestimmte Domäne standardmäßig signiert ist. (Es sei denn, Sie einen wirklich guten Grund haben nicht alle Server generierte E-Mail für eine Domain anmelden).

Der beste Ausgangspunkt in meinem googeln DKIM-Setup auf LAMP mit dkim-Milter und Sendmail (auf CentOS 5.2 in meinem Fall) zu bekommen war Jeff Atwood Post über E-Mails durch den Code senden.

Ich würde ihm zustimmen, dass die ersten zwei Dinge, die Sie sind Reverse-PTR-Record und DKIM-Signierung adressieren sollte.

Auch sehr wichtig:

  1. IP-Adresse der E-Mail-Box zu senden nicht bereits die schwarze Liste gesetzt werden.
  2. stellen Sie sicher, postmaster@emailsendingdomain.com ist eine gültige E-Mail-Box
  3. , wenn Ihr Server generierte E-Mail Bedürfnisse erscheinen von woanders (wie ein Kontaktformular, um von Namen / E-Mail in einer Form zur Verfügung gestellt kommen) zu kommen, befolgen Sie diese Richtlinien für E-Mail-Header .

Hier ist die E-Mail-IP-Adresse schwarze Liste checker , dass ich verwendet.

Diese 5 Dinge werden vielleicht 95% Ihrer E-Mail-Zustellbarkeit Probleme lösen.

Die Leitfaden für Fedora / DKIM-milter / postfix ist auch sehr gut.

Die PHP-Mail-Bibliothek, die ich für meinen app ist PHPMailer 5.1, die DKIM-Unterstützung hat (und ist nur in PHP 5), aber nach der Forschung, ich an der Sendmail-Ebene entschied Umsetzung war eine bessere Lösung. Wie Sie sehen können, auch der Autor von PHPMailer 5.1 ist DKIM nicht auf der Mail-Bibliothek Ebene PHP vorschlagen ist die beste Lösung http: / /dkim.worxware.com/ .

Viel Glück für Sie.

Andere Tipps

Dies ist eine, die für eine Weile auf meinem Radar gewesen und konnte nicht eine endgültige Antwort auf die ursprüngliche Frage in diesem Thread irgendwo im Web finden. Ich habe jetzt in der Lage gewesen DKIM unterzeichnet SMTP E-Mail mit PHP / Pear implementieren zu senden. Im Folgenden sind die erforderlichen Schritte.

  1. Ich fand eine modifizierte Version des DKIM von http://www.ra726.net/blog/2010/07/20/sending-email-to-gmail-from-php-without-being -markierte-as-Spam / (Sie können es herunterladen über http: // www. ra726.net/php-dkim.zip ). Wenn Sie bereits DKIM umgesetzt haben, und müssen nur mit SMP-Mail funktioniert dann brauchen Sie daraus die dkim.php Datei ist, die, wie der Blog sagt, modifiziert ist leicht zu handhaben Header als Array übergeben. In meinem Code habe ich es genannt dkimNEW.php.

  2. Stellen Sie sicher, Sie am meisten Header enthalten, so dass der MTA die Nachricht nicht ändern, nachdem Sie es unterzeichnet haben. In meiner begrenzten Forschung, die am meisten hinzugefügt Header sind das Datum und die Message-ID-Header, so sieht mein Kopf Array wie folgt: Anmerkung: Ich dies eine HTML-E-Mail für das Senden verwendet, zum Anzug ändern! Fügen Sie außerdem Ihre Domäne wie der letzte Teil der Message-ID

    $headers = array(
        'Subject' => $subject,
        'From' => $from,
        'To' => $to,
        'MIME-Version' => '1.0',
        'Date' => date('r'),
        'Message-ID' => '<'.sha1(microtime(true)).'@yourdomain.com>',
        'Content-Type' => 'text/html',
        'Content-Transfer-Encoding' => 'quoted-printable',
    ); // end $headers
    
  3. Sie erhalten dann die modifizierte dkim.php oben erwähnt verwenden Ihre E-Mail zu unterzeichnen und die Signatur an den Header-Array hinzufügen, auch bekannt als

    require 'dkimNEW.php';
    $dkim = AddDKIM($headers, $subject, $body);
    $headers['DKIM-Signature'] = $dkim;
    

Der Rest des Codes ist der normale Code E-Mail über SMTP mit PHP / Birne zu senden. Der gesamte Arbeitscode lautet:

<?php
    require_once 'Mail.php';
    require_once 'Mail/mime.php';
  // set all of the parameters
    $subject = 'Test of DKIM';
    $from = 'My Name <myname@mydomain.com>';
    $to = 'First Recipient <recipient1@domain.com>';
    $pbody ='<html><head></head><body><h1>Done! DKIM test</h1>Result, next?</body></html>';
    $text = strip_tags($pbody);

    // create the headers
    $headers = array(
        'Subject' => $subject,
        'From' => $from,
        'To' => $to,
        'MIME-Version' => '1.0',
        'Date' => date('r'),
        'Message-ID' => '<'.sha1(microtime(true)).'@mydomain.com>',
        'Content-Type' => 'text/html',
        'Content-Transfer-Encoding' => 'quoted-printable',
    ); // end $headers


    // create the message
    $mime = new Mail_mime("\n");
    $mime->setTXTBody($text);
    $mime->setHTMLBody($pbody);

    // always call these methods in this order
    $body = $mime->get();
    $headers = $mime->headers($headers);

    require 'dkimNEW.php' ;
    $dkim = AddDKIM($headers, $subject, $body);
    $headers['DKIM-Signature'] = $dkim;

    // create the smtp mail object
    $smtp_params = array(
        'host' => 'mail.mydomain.com',
        'auth' => true,
        'username' => 'myUserName',
        'password' => 'myPassWord',
    ); // end $smtp_params
    $smtp = Mail::factory('smtp', $smtp_params);

    // send the message

    $recipients = array('recipient1@domain.com', 'recipient2@domain.com');
    $mail = $smtp->send($recipients, $headers, $body);

?>

PS. Gerade falls Sie nicht bemerkt haben, ersetzen Werte mit Ihrem eigenen!

Daher ist alles, was im Wesentlichen benötigt wird DKIM zur Arbeit mit SMTP-E-Mail zu machen (oder auch die PHP-Mail), um sicherzustellen, dass Sie alle die Header angeben, die an Ihre E-Mail von Ihrem MTA hinzugefügt werden, dann die Header unterschreiben, unterliegt und Körper der Nachricht, und schließlich ist der signiert Teil mit Kopf.

Haben Sie versuchen: phpMailDomainSigner Es unterstützt DKIM-Signatur und DomainKey-Signatur in der objektorientierten Stil.

Hier einige Beispiele:

// Create mailDomainSigner Object
include_once './lib/class.mailDomainSigner.php';

$mds = &new mailDomainSigner($domain_priv,$domain_d,$domain_s);
$new_data = $mds->sign(
                $mail_data,
                "Message-ID:Subject:From:Content-Type:MIME-Version:Content-Transfer-Encoding:Received:To:Date",
                true,true,false);

Eine Klasse ausschließlich für DKIM, die ist ein Spin-off von PHPMailer, aber mit Verbesserungen in Bezug auf die Einhaltung der RFC und schön-und-clean-Code:

https://sourceforge.net/projects/dkim-class-php/

Beispiel:

include_once('dkim.class.php');
$dkim = new DKIM();
$dkim_header = $dkim -> get_DKIM_header($to, $subject, $message, $headers);
mail($to, $subject, $message, $dkim_header.$headers);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top