Отправка почты с помощью phpmailer с использованием smpt с dkim через постфикс

Итак, я использую phpmailer, используя smpt, и он проходит через постфикс для отправки электронных писем. Когда я отправляю электронное письмо со своей электронной почты, оно проходит без проблем, когда речь идет об использовании 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';

person willis    schedule 06.10.2017    source источник
comment
Я также не уверен, нужно ли мне использовать второй набор кода. На моем DNS я могу использовать открытые ключи с двумя разными селекторами, и это повлияет на исходящую электронную почту.   -  person willis    schedule 06.10.2017


Ответы (1)


Существует несколько способов реализации подписи DKIM.

  1. С этими свойствами в PHPMailer, где ваш клиентский скрипт нуждается в прямом доступе к вашим закрытым ключам. Хорошо, когда у вас нет контроля над средой отправки - например. на общем хостинге, но это означает, что каждый отдельный скрипт отправки отвечает за подпись, что не идеально.
  2. Получение вашего почтового сервера для подписи за вас. Хорошо, когда у вас есть свой почтовый сервер и возможность его настроить - вся почта, которая проходит через него, может быть подписана автоматически, и вам не нужно ничего делать на стороне клиента.
  3. Использование подписывающего SMTP-ретранслятора/прокси-сервера в соответствии с вашим существующим почтовым сервером, например Hmailserver для Windows. Хорошо, когда у вас есть собственный почтовый сервер, но у вас нет к нему доступа администратора или он не может работать с DKIM.

Селектор должен совпадать с ключом, которым вы подписываетесь, поэтому, если у вас есть селектор с именем s1, вы ожидаете, что открытый ключ будет доступен в записи TXT с именем s1._domainkey в DNS вашего домена. Соответствующий закрытый ключ просто должен находиться в безопасном и недоступном для Интернета месте на сервере.

DNS и расположение ключей одинаковы, какой бы механизм подписи вы ни использовали. Если вы используете DKIM PHPMailer, вам не нужен openDKIM, но если вы хотите использовать OpenDKIM, вам нужно указать, какой селектор вы хотите использовать в его конфигурации. Некоторые почтовые серверы (такие как GreenArrow, которые я использую) позволяют динамически управлять селекторами через настраиваемые заголовки сообщений, но я не Не думаю, что OpenDKIM поддерживает это. Возможно, вы сможете настроить виртуальные MTA в postfix, которые позволяют что-то подобное.

Справочник по PHPMailer см. в приведенном примере подписи DKIM. и тест DKIM в наборе тестов.

person Synchro    schedule 06.10.2017