PHP tabanlı bir SMTP istemci DomainKeys / DKIM ayarlama

6 Cevap php

Bazı büyük kütüphaneler C # /. NET üzerinde e-postaları DomainKeys imzalanması yapmak için orada var gibi görünüyor, ama PHP için destek aynı tür bulmak gerçekten zor bir zaman yaşıyorum. Belki de doğru yerde aramıyorum?

Ben buldum tek http://php-dkim.sourceforge.net/ olduğu; inanılmaz hacky görünüyor ve PHP4 destekler. Popüler PHP nasıl göz önüne alındığında, ve ne kadar kritik DomainKeys non-spam olarak e-posta sınıflandırma için, ben daha iyi araçlar beklersiniz; Herhangi biliyor musunuz? Eğer tavsiye ederim başka hileler?

Ekstra bilgi: Ben günde binlerce eposta göndermek gerekiyor çünkü bir dış SMTP sağlayıcı kullanıyorum.

6 Cevap

Ben bu yüzden belirli bir etki için tüm sunucu oluşturulan e-posta varsayılan tarafından imzalanan MTA düzeyde DKIM destek tavsiye ederim. (Eğer bir etki alanı için tüm sunucu oluşturulan e imzalamak değil gerçekten iyi bir nedeniniz olmadıkça).

Dkim-milter ve (benim durumumda CentOS 5.2) sendmail idi ile LAMP DKIM kurulum almak benim googling en iyi başlangıç ​​noktası Jeff Atwood's post about sending emails through code.

Seni ele almalıdır ilk 2 şey ters PTR kaydı ve DKIM imza olduğu onunla aynı fikirde olacaktır.

Ayrıca çok önemli:

  1. E-posta göndermek için kutunun IP adresi zaten fişleniyor değil.
  2. emin olun postmaster@emailsendingdomain.com geçerli bir e-posta kutusu
  3. Sunucu oluşturulan e-posta başka bir yere (bir formda temin adı / e gelen gerek bir iletişim formu gibi) gelen görünen gerekiyorsa follow these guidelines for email headers.

Burada kullanılan email ip address blacklist checker olmasıdır.

Bu 5 şey belki de e-posta deliverability sorunları% 95 çözecektir.

Bu Guide for Fedora/dkim-milter/postfix de çok iyidir.

Benim app için kullanmak PHP posta kütüphanesi DKIM desteği vardır PHPMailer 5.1 (ve sadece PHP 5), ama araştırma yaptıktan sonra, ben sendmail düzeyinde uygulanması daha iyi bir çözüm olduğuna karar verdi. Gördüğünüz gibi, PHPMailer 5.1 bile yazarı PHP posta kütüphane düzeyde DKIM önermez iyi çözümdür http://dkim.worxware.com/.

Size iyi şanslar.

Eğer denemek var: phpMailDomainSigner Bu Object Oriented Style DKIM-İmza ve DomainKey-imza desteği.

Here some example:

// 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);

A sınıfı yalnızca DKIM için PHPMailer bir spin-off, ancak RFC ve temiz, güzel-ve-kod saygıya gelişmeler ile olan:

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

Örnek:

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);

Bu bir süre için benim radar üzerinde olmuştur ve her yerde internet üzerinde bu thread orijinal soruya kesin bir yanıt bulamadı biridir. Ben şimdi DKIM PHP / Armut ile SMTP e-imzalı göndererek uygulamak mümkün olmuştur. Aşağıda gerekli adımlardır.

  1. I http://www.ra726.net/blog/2010/07/20/sending-email-to-gmail-from-php-without-being-marked-as-spam/ (sen http://www.ra726.net/php-dkim.zip üzerinden indirebilirsiniz) gelen DKIM değiştirilmiş bir sürümü bulundu. Zaten DKIM uygulanan ve sadece SMP posta ile çalışması için gereken varsa o zaman bu ihtiyaç duyduğunuz tüm blog dediği gibi, hafif bir dizi olarak aktarılır başlıklarını ele değiştirilmiş, dkim.php dosyadır. Benim kod, ben bunu dkimNEW.php adında var.

  2. Bunu imzaladıktan sonra MTA mesajı değiştirmek değildir böylece en başlıklarını eklemek emin olun. Benim sınırlı araştırmada, en fazla katma başlıklar böylece benim başlık dizi bu gibi görünüyor, Tarih ve Message-ID başlıkları şunlardır: Not: Ben uygun bir html e-posta, değişim göndermek için kullanılan bu! Ayrıca, Message-ID son parçası olarak etki alanını eklemek

    $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. Daha sonra e-posta giriş VE başlıkları diziye imza eklemek, aka için yukarıda belirtilen değiştirilmiş dkim.php kullanmak alacak

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

Kodun geri kalanı PHP / Armut ile SMTP üzerinden e-posta göndermek için normal bir koddur. Tam çalışma kodu:

<?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. Eğer fark etmedi sadece durumda, kendi ile değerlerini değiştirin!

Bu nedenle, tüm bu aslında konu başlıklarını ve vücut işaretinin ardından, size MTA tarafından e-posta eklenen tüm başlıklarını belirtmek sağlamak için DKIM SMTP e-posta (veya gerçekten PHP mail) ile çalışma yapmak için zamana ihtiyaç olduğu Sonunda mesajı ve başlığı ile imzalandığı kısmını içerir.

Ayrıca SquirrelMail'in eklenti deneyebilirsiniz,

http://eder.us/projects/domainkeys/

PHPMailer DKIM imzalanması için bazı destek vardır.