Возможно ли и как настроить почтовый сервер Exim4 для преобразования исходящих сообщений (или частей сообщений) из 8-битной кодировки в Quoted-Printable (или Base64, хотя я бы предпочел QP), прежде чем подписывать их с помощью DKIM и передавать их ?
В настоящее время у нас есть установка, при которой сообщения, содержащие 8-битные части, получают недопустимую подпись DKIM при поступлении на целевой сервер, поскольку они конвертируются вышестоящим сервером (который мы не контролируем) в Quoted-Printable. К сожалению, мы не можем жаловаться на поведение вышестоящего сервера, потому что RFC4871 четко указывает, что именно подписывающий сервер должен перекодировать почту в соответствующей кодировке перед подписью (см. RFC4871, раздел 5.3):
Чтобы свести к минимуму вероятность такого нарушения, подписывающим сторонам СЛЕДУЕТ преобразовать сообщение в подходящую кодировку передачи содержимого MIME, такую как quoted-printable или base64, как описано в части первой MIME [RFC2045] перед подписанием.
Поэтому я ожидал, что это преобразование будет базовой функцией любого почтового сервера, поддерживающего DKIM, но, насколько я искал в руководствах по exim, ничего подобного нет. Есть ли какое-нибудь известное решение этой проблемы?
В настоящее время я нашел решение использовать reformime
команда, поставляемая с maildrop
инструмент, используя -r7
вариант, как транспортный фильтр eximʻa.
однажды maildrop
установлен, достаточно настроить транспортный фильтр на транспорте (ах) SMTP, используемом Exim для передачи почты на серверы назначения:
remote_smtp_smarthost:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
# filter outgoing messages to convert 8-bit to Quoted-Printable when needed
transport_filter = /usr/bin/reformime -r7
В нашем случае это был 30_exim4-config_remote_smtp_smarthost
config, поскольку мы используем smarthost, для более стандартных серверов без smarthost это будет 30_exim4-config_remote_smtp
; вам также может потребоваться изменить другие транспорты в зависимости от конкретной конфигурации, которую вы используете.
reformime
- это небольшой инструмент, написанный на чистом C, поэтому он очень легкий и добавляет небольшие накладные расходы на обработку почты. Однако, похоже, необходимо буферизовать все передаваемое сообщение в памяти для обработки, поэтому будьте осторожны, если у вас очень загруженный сервер с небольшим объемом доступной оперативной памяти.