繁体   English   中英

使用php使用phpmailer发送邮件,使用dkim通过postfix

[英]Sending mail using phpmailer using smpt with dkim going thru postfix

所以我使用phpmailer使用smpt,它将通过postfix发送电子邮件。 当我从我的电子邮件发送电子邮件时,它在使用DKIM和DMARC时没有任何问题。 但是当我使用phpmailer发送时我没有得到DKIM。

 <?php


   function send_email($to, $from_email, $from_name, $subject, $body, 
      $is_html=false, $attachments=null) {
         global $smtp_host, $smtp_port, $smtp_user, $smtp_password;
       try {
        $email = new PHPMailer(true);
           if ($from_email === $smtp_user) {
             $email->isSMTP();
             $email->Host = $smtp_host;
             $email->Port = $smtp_port;
             $email->SMTPAuth = true;
             $email->Username = $smtp_user;
             $email->Password = $smtp_password;
             $email->SMTPSecure = 'tls';
          }

             $email->CharSet = 'UTF-8';
             $email->From      = $from_email;
             $email->FromName  = $from_email;
             $email->Subject   = $subject;
             $email->Body      = $body;
             $email->AddAddress($to);

         if ($is_html == true) {
             $email->IsHTML(true);
             $email->Encoding = 'base64';
         }

         if ($attachments != null) {
           foreach ($attachments as $attachment) {
                $apath = $attachment["path"];
                $aname = $attachment["name"];
                $email->AddAttachment($apath , $aname);
            }
        }

             $email->Send();
             $status = "success";
       }
           catch (phpmailerException $e) {
           $status = $e->errorMessage();
      }
           catch (Exception $e) {
           $status = $e->getMessage();
      }
          return $status;
     }

所以我想我需要将它添加到我的代码中,但我不确定是否必须将其添加到代码中。 我以为opendkim只会将DKIM添加到标题中。 但事实并非如此。

$email->DKIM_domain = 'mydomain.com';
$email->DKIM_private = '/path/to/private_key';
$email->DKIM_selector = 'default'; 
$email->DKIM_passphrase = '1234567';

您可以通过多种方式实施DKIM签名。

  1. 使用PHPMailer中的这些属性,您的客户端脚本需要直接访问您的私钥。 当你无法控制发送环境时很好 - 例如在共享主机上,但这意味着每个发送脚本都负责签名,这并不理想。
  2. 让您的邮件服务器为您进行签名。 拥有自己的邮件服务器并具备配置权限时很好 - 通过它的所有邮件都可以自动签名,而且您不必在客户端执行任何操作。
  3. 使用符合现有邮件服务器的签名SMTP中继/代理服务器,例如Hmailserver for Windows 当你拥有自己的邮件服务器但没有管理员访问权限,或者它无法执行DKIM时,这很好。

选择器需要匹配您正在签名的密钥,因此如果您有一个名为s1的选择器,您可能希望公钥在域DNS的名为s1._domainkey的TXT记录中可用。 匹配的私钥只需要安全且在服务器上无法访问。

无论您使用哪种签名机制,DNS和密钥安排都是相同的。 如果您使用PHPMailer的DKIM,则不需要openDKIM,但如果您想使用OpenDKIM,则需要告诉它要在其配置中使用哪个选择器。 一些邮件服务器(如我使用的GreenArrow )允许通过自定义邮件头动态控制选择器,但我不认为OpenDKIM支持这一点。 您可以在postfix中设置允许类似内容的虚拟MTA。

有关PHPMailer参考,请查看提供的DKIM签名示例以及测试套件中的DKIM测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM