Подпись DKIM не проверяется при отправке почты с помощью PHP

У меня возникла проблема с фильтрацией электронной почты gmail/hotmail с моего сервера как спам. Оценка Spam Assassin довольно низкая, поэтому я знаю, что мой IP-адрес не находится в каких-либо черных списках или тому подобном, что означает, что фильтрация, которую использует gmail/hotmail, предотвращает получение электронных писем.

Я провел небольшое исследование и прочитал, что использование DKIM, возможно, решит проблемы, с которыми я столкнулся. Я пошел дальше и включил DKIM на своем сервере. Теперь, когда я отправляю электронные письма с помощью своего почтового клиента, инструмент находится здесь (http://www.brandonchecketts.com/emailtest.php) сообщает, что подпись DKIM действительна.

Следующим шагом было внедрение подписи DKIM в мои письма PHP. Поэтому я пошел дальше и использовал этот класс DKIM, расположенный здесь (http://sourceforge.net/projects/dkim-class-php/), который является побочным продуктом PHPMailer.

Однако, когда я отправляю электронные письма сейчас, несмотря на наличие подписи DKIM, я получаю странную ошибку от инструмента проверки.

result = fail
Details: message has been altered

Полный отчет можно посмотреть здесь: http://www.brandonchecketts.com/[email protected]

Спасибо за любую помощь, я отчаянно пытаюсь заставить это работать и уже несколько часов бьюсь головой о стену.


person nmford    schedule 30.07.2012    source источник
comment
Похоже, вы подписываете заголовки "от" и "тема" (плюс тело). Вы должны убедиться, что никакие почтовые серверы между вами и тестовой программой не изменяют эти заголовки или содержимое тела. Проблема также может заключаться в том, что класс подписавшего DKIM содержит ошибку или использует неправильный ключ.   -  person Borealid    schedule 30.07.2012
comment
Как проверить, что почтовые серверы не изменяют содержимое тела? Также ключ определенно правильный, только что дважды проверил его.   -  person nmford    schedule 30.07.2012
comment
Изучите отправленное вами сообщение и сообщение, полученное тестовой программой. Убедитесь, что они идентичны в местах, которые подписаны.   -  person Borealid    schedule 30.07.2012


Ответы (2)


Я дал ответ на это здесь: Настройка DomainKeys/DKIM в SMTP-клиенте на основе PHP

По сути, вам нужно убедиться, что вы предоставили все заголовки, которые ваш MTA добавляет к вашей исходящей электронной почте. Поскольку разные системы настроены по-разному, универсального решения для всех не существует.

Посмотрите на источник сообщения, который не прошел подпись (и выдает ошибку Message Altered), чтобы определить, какие заголовки были добавлены. Как правило, ваш MTA добавит заголовок Message-ID и Date (заголовок Date также может вызвать низкий уровень спама). оценка убийцы, если она отсутствует, так что вы можете включить ее!).

Еще одна распространенная ошибка заключается в том, что вы сами изменяете сообщение ПОСЛЕ подписания сообщения, поэтому убедитесь, что в код не внесены изменения после того, как вы подписали свое сообщение.

После определения того, какие заголовки были добавлены, вы должны добавить эти заголовки самостоятельно (и, следовательно, переопределить поведение вашего MTA по умолчанию, добавляющее их) в электронное письмо перед подписанием.

person Nepaluz    schedule 23.10.2012

Я обнаружил странное поведение php mail() + postfix с dkim:

Если вы сделаете

$headers .= "From: USER <$from_email>\n";

DKIM будет неправильным, но если вы это сделаете:

$headers .= "From: USER <" . $from_email . ">\n";

Все в порядке! Странный. Очень странно. Также пользователям рекомендуется сделать

trim($emailContent) 
person oWk    schedule 09.02.2016