Настроил DKIM подпись писем с сервака, все работает, проблем не наблюдалось. Буквально вчера заметил, что на одних письмах с сайта подпись верная, на других не верная (по информации почты Яндекса). Целый день копался пытался понять зависимость и выяснил, что на маленьких по объему письмах подпись корректна, но как в письме появляется много букв, так подпись становится неверной. Обрыл весь Интернет, крутил по всякому настройки postfix и opendkim ничего не помогает.
Кто сталкивался по жизни с такой проблемой зависимости размера письма и валидностью DKIM подписи? Куда копать?
Под понятием большое письмо я имею ввиду объем в более 1208 символов, цифра подобрана опытным путем, как только письмо отправляю в более 1208 символов - подпись становится не валидна.
Профессиональная разработка сайтов на 1С-Битрикс и администрирование серверов - http://pogudin.pro
В деталях не изучал работу Postfix + OpemDKIM. Но с exim 4.72 проблема с подписями DKIM периодически наблюдалась, в частности один случай воспроизводился при использовании только одного из адресов рассылки в pdd.yandex.ru(на 9 адресах dkim pass, на одном fail), при этом подпись того же самого письма отсылаемого на конечный адрес или алиас распознавалась. В моем случае помогло обновление exim до версии 4.80.1, он есть в репозитарии http://atrpms.net/ установить:
Sergey Pogudin написал: Под понятием большое письмо я имею ввиду объем в более 1208 символов, цифра подобрана опытным путем, как только письмо отправляю в более 1208 символов - подпись становится не валидна.
Я бы попробовал перечислить конкретные заголовки по которым подпись формируется, возможно какой то из них дает ошибку. Если я привольно понял(http://www.opendkim.org/opendkim.conf.5.html), то это параметр SignHeaders, по умолчанию список заголовков берется рекомендованный RFC.
Заголовки участвующие в формировании подписи, можно посмотреть в любом письме, например:
Новые подробности проблемы. Сегодня случайно выяснил причину когда подпись становится не верной.
Проблема возникает когда в тексте письма есть длинные строки, в более чем 990 символов. Тоесть проблема не в общем объеме письма, делая перевод строки у 989 символа, и все становится ок, а именно в наличии таких длинный строк.
Профессиональная разработка сайтов на 1С-Битрикс и администрирование серверов - http://pogudin.pro
Это довольно известная проблема. Протокол SMTP не допускает строк длиннее 1000 символов в теле письма (см. RFC 5321, 4.5.3.1.6). Чтобы с запасом соответствовать этому требованию, Postfix автоматически разбивает строки длиннее 990 символов с помощью CRLF (перенос строк в Windows-стиле) и пробела.
Загвоздка в том, что заголовки письма, частью которого является подпись DKIM формируются раньше, чем обрабатывается тело письма. Таким образом, тело письма изменяется после формирования подписи DKIM, делая эту подпись некорректной.
Есть несколько вариантов решения проблемы:
Можно увеличить значение параметра smtp_line_length_limit в Postfix. Однако, если значение параметра превысит 1000, это может не понравиться некоторым почтовым серверам из-за несоответствия RFC — письма на эти сервера перестанут приходить.
Можно попробовать реализовать собственный content filter в Postfix, который будет делать то же самое что и Postfix — разбивать длинные строки, — но до формирования подписи DKIM. Это решение может оказаться довольно трудоемким, так как придется самостоятельно учитывать все требования RFC. Например, письма, попадающие в обработку могут оказаться закодированными, или зашифрованными.
Можно модифицировать приложение, которое формирует некорректные письма. Так как проблема возникает именно на этом уровне, данное решение является наиболее предпочтительным. Например, если проблемные письма уходят из Битрикса, достаточно переопределить функцию отправки письма bxmail и использовать вместо стандартной функции mail библиотеку PHPMailer с установленным в base64 параметром Encoding. Все решение в этом случае займет 5-7 строк кода, Битрикс начнет отправлять корректные письма, а на проекте появится очень гибкий почтовый отправитель в виде PHPMailer.
Delivered to internal network by a host with no rDNS This may indicate you do not have a rDNS configured for your hostname or the rDNS does not match your sending IP
[SPF] riggs.ua не позволяет Вашему серверу 194.213.104.119 использовать mail@riggs.ua
Ваше сообщение не подписано DKIM
У вас нет записи DMARC
Домен из обратной DNS-зоны не соответствует домену отправителя.
Виталий Фантич написал: Домен из обратной DNS-зоны не соответствует домену отправителя.
Цитата
Виталий Фантич написал: Delivered to internal network by a host with no rDNSThis may indicate you do not have a rDNS configured for your hostname or the rDNS does not match your sending IP
Это PTR, и тут как повезет, ваш хостер или дает прописать обратную зону, или нет.