DKIM работает только на короткие сообщения

Эта проблема:

Я использую OpenDKIM с Postfix. Почта генерируется в PHP с использованием следующего кода, а затем отправляется с mail():

// message
$message  = "--$hash".PHP_EOL;
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"".PHP_EOL;
$message .= "Content-Transfer-Encoding: base64".PHP_EOL.PHP_EOL;
$message .= base64_encode($body).PHP_EOL.PHP_EOL;
$message .= "--$hash".PHP_EOL;

OpenDKIM отлично работает для любых сообщений длиной до 742 символов, но если сообщение составляет 742 символа или более, Google сообщает, что DKIM «body hash did not verify».

Глядя на DKIM и Google, я не могу найти никакой информации о том, что может вызвать это. Я пробовал несколько сообщений, которые состоят из 741 символа (все проходят) и несколько сообщений, которые составляют 742 символа (все не удается).


Ошибки:

Единственная ошибка в получении электронной почты Google (который говорит, что не может подтвердить подлинность):

dkim=neutral (body hash did not verify) [email protected];

/var/log/maillog имеет следующее (или что-то подобное) на успешных и неудачных электронных письмах:

Nov  5 00:58:57 ip-XX-XX-XX-XX opendkim[3953]: 7D2946081A: DKIM-Signature field added (s=default, d=mailer.example.com)

Решение:

Согласно приведенному ниже решению @Adrien Lebner, это было простое изменение

base64_encode($body)

в

chunk_split(base64_encode($body), 76, PHP_EOL)

это решило проблему.

1

Решение

Что делать, если вы отправляете одинаковый контент в нескольких строках?

DKIM может сломаться, если длина строки слишком велика:

2.1.1. Пределы длины линии

Есть две ограничения, которые эта спецификация накладывает на число
символов в строке. Каждая строка символов ДОЛЖНА быть не более
чем 998 символов, и ДОЛЖНЫ быть не более 78 символов,
исключая CRLF.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]