Я видел точно такое же поведение в Outlook 2013 и Outlook 2016, которые ложно сообщали о подписанных сообщениях, подписанных несколькими частями, как о подделке, будет The Bat! v7 Professional (Windows) и Mac Mail (El Capitan) сообщают о тех же сообщениях, что и действительные.
Проблема вызвана либо возвратом каретки (CR), либо переводом строки (LF), либо сочетанием обоих (CRLF) в конце полезной нагрузки вашего сообщения.
Конечная полезная нагрузка вашего сообщения означает финал:
------ = _ NextPart_000_0005_01D0553F.10373AE0--
в неподписанном / необработанном сообщении, которое вы разместили.
Даже не имеет значения, какой клиент отправит сообщение, Outlook в Outlook потерпит неудачу так же, как Mac Mail в Outlook.
Увидев, что вы используете Почту Windows Live, я могу предположить, что это влияет на все почтовые клиенты, использующие почтовый и / или криптобэкэнд Windows.
Вы даже можете достоверно воспроизвести это, отправив сообщение из нескольких частей, используя только telnet / ncat ...
Так что для ясности, я почти на 99% уверен, что ваши письма правильно подписаны действующим сертификатом. Просто Microsoft делает что-то - опять же - по-другому.
Теперь я понятия не имею, что внутренне сделал ключ -b при подписании-я уверен, что он позаботился о том, чтобы убедиться, что ваша полезная нагрузка правильно экранирована до ее подписания.
«Сделал» просто потому, что эта опция, похоже, была пропущена в текущем выпуске (здесь запущена версия подписи 20150308), который просто выводит
опция -b игнорируется по причинам совместимости, вы можете удалить ее безопасно
когда выполняется с этим аргументом, и письма, конечно, все еще не проходят проверку в Outlook.
Таким образом, наиболее очевидный обходной путь, по-видимому, заключается в том, чтобы перебирать письма через дополнительный миллиметр, прежде чем отправлять их подписывающему.
Так как у меня уже есть такой пользовательский milter (написанный на python с использованием libmilter), я мог бы просто принять мой код, чтобы позаботиться об этом:
... if mail.is_multipart(): logging.debug("Stripping tailing line feeds (if any) from multi-part payload") new_body = new_body.rstrip() workflow["repl_body"] = new_body return workflow
Так что Outlook наконец перестает жаловаться ни на что.
ура