Из за чего письма отправленные PHPMailer не проходят DKIM проверку?

Подключил у себя на хостинге DKIM для подписывания отправляемых писем.
Добавление DKIM подписи происходит на SMTP сервере.
Валидность подписи DKIM проверяю сервисом www.brandonchecketts.com/emailtest.php
При отправке через web интерфейс почты и через десктопный клиент валидация проходит.
При отправке с помощью PHP скрипта с использованием PHPMailer валидация не проходит.
В тоже время при отправке с помощью PHP скрипта который использует SwiftMailer валидация проходит.

В чём может быть проблема?
  • Вопрос задан
  • 6144 просмотра
Пригласить эксперта
Ответы на вопрос 3
@smartlight
обратите внимание на заголовки писем в разных случаях
Ответ написан
Вообще-то, судя по заголовкам, вместо DKIM (RFC 4871) у вас устаревший DomainKeys (RFC 4870), в DKIM используется DKIM-Signature, а не DomainKey-Signature. По RFC 4870 вам вряд ли кто-то поможет, т.к. на практике он никогда особо не использовался. Видимо, где-то что-то не то прикрутили.
Ответ написан
sveneld
@sveneld Автор вопроса
Добавил DKIM вместо Domain Keys и внёс следующие правки в PHPMailer

Строка 2282:

меняем
$headers = explode("\n\r",$headers_line);
на
$headers = explode($this->LE,$headers_line);

Строки 2292 и 2293
меняем
$from = str_replace('|','=7C',$this->DKIM_QP($from_header)); $to = str_replace('|','=7C',$this->DKIM_QP($to_header));
на
$from = str_replace('|','=7C',($from_header)); $to = str_replace('|','=7C',($to_header));
Строка 2297
меняем
$DKIMb64 = base64_encode(pack("H*", sha1($body))) ;
на
$DKIMb64 = base64_encode(pack("H*", sha1("\r\n" . preg_replace("/\r\n$/", "", $body)))) ;

После этого всё заработало :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы