看来有一些很棒的库可以在C#/。网上签署电子邮件,但我很难找到对PHP的同样支持。也许我不在正确的位置?

我发现的唯一一个是 http://php-dkim.sourceforge.net/;它看起来令人难以置信,仅支持PHP4。考虑到PHP的流行程度以及电子邮件分类为非垃圾邮件的重要域名,我希望更好的工具;你知道吗?您还会推荐其他技巧吗?

额外信息:我正在使用外部SMTP提供商,因为我每天需要发送数千封电子邮件。

有帮助吗?

解决方案

我建议在MTA级别推荐DKIM支持,以便默认情况下签署您的所有服务器生成的给定域的电子邮件。 (除非您有充分的理由不签署所有服务器生成的电子邮件为域)。

我谷歌搜索中最好的起点是与DKIM-MILTER和SENDMAIL(在Centos 5.2上)在Lamp上设置DKIM设置(在我的情况下为5.2)是 杰夫·阿特伍德(Jeff Atwood)关于通过代码发送电子邮件的帖子.

我同意他的看法,您应该解决的前两件事是反向PTR记录和DKIM签名。

也非常重要:

  1. 框的IP地址发送电子邮件尚未被黑名单。
  2. 确保postmaster@emailsendenddomain.com是一个有效的电子邮件框
  3. 如果您的服务器生成的电子邮件似乎来自其他地方(例如需要从表格中提供的名称/电子邮件的联系表格) 遵循这些指南以获取电子邮件标题.

这里是 电子邮件IP地址黑名单检查器 我用过。

这5件事可能会解决您的电子邮件交付性问题的95%。

Fedora/DKIM-MILTER/POSTFIX指南 也很好。

我用于应用程序的PHP邮件库是具有DKIM支持的PhpMailer 5.1(仅是PHP 5),但是在进行研究之后,我决定在Sendmail级别实施是一个更好的解决方案。如您所见,即使是phpmailer 5.1的作者也不建议在php邮件库中DKIM是最好的解决方案 http://dkim.worxware.com/.

祝你好运。

其他提示

这是我的雷达上一段时间,在网络上任何地方的此线程中都找不到对原始问题的确切答案。现在,我已经能够用PHP/PEAR实施发送DKIM签名的SMTP电子邮件。以下是所需的步骤。

  1. 我从 http://www.ra726.net/blog/2010/07/20/sending-email-email-to-gmail-from-php-without-being-being-marked-as-as-spam/ (您可以通过 http://www.ra726.net/php-dkim.zip)。如果您已经实施了DKIM,并且只需要与SMP邮件一起使用它,那么您所需的只是dkim.php文件,正如博客所说,它经过了稍微修改以处理作为数组传递的标头。在我的代码中,我将其命名为dkimnew.php。

  2. 确保您包含大多数标题,以便MTA签名后不会修改消息。在我有限的研究中,添加的标题是日期和消息ID标题,因此我的标题阵列看起来像这样:注意:我将其用于发送HTML电子邮件,更改以适合!另外,将您的域作为消息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. 然后,您将使用上面提到的修改后的dkim.php签署电子邮件,并将签名添加到标题数组,也就是

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

该代码的其余代码是通过使用PHP/PEAR通过SMTP发送电子邮件的普通代码。完整的工作代码是:

<?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。以防万一您没有注意到,用自己的值替换值!

因此,使DKIM与SMTP电子邮件(或确实是PHP邮件)一起工作的所有本质所需的一切都是为了确保您指定MTA添加到电子邮件中的所有标题,然后签名。该消息,最后在您的标题中包括该部分。

您尝试过: phpmaildomainsigner 它支持DKIM签名和域名签名,以面向对象的样式。

这里有一些示例:

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

仅适用于DKIM的课程,它是phpmailer的衍生产品,但在RFC和尼斯和清洁代码的尊重方面得到了改进:

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

例子 :

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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top