foo
является внешний домен, MTA которого находится вне моего контроля;foo
имеет SPF настроить так, чтобы mine
серверы не могут отправлять электронную почту как @foo
;bar
является другой внешний домен, MTA которого также находится вне моего контроля;bar
делает Проверка SPF о входящих письмах для отклонения явных отказов (рекомендация RFC и общепринятая практика);mine
это локальный домен, из которых MTA - это настраиваемый мной exim, он работал несколько лет, но только сейчас мы заметили некорректное поведение;List <list@mine>
это список рассылки из которых Bob <bob@foo>
является членом (примечание: на самом деле это также может быть «адрес пересылки», но проще представить его со списками);list@mine
члены хранятся в mysql база данных это управляется в другом месте (что означает, что это не статический список);Alice <alice@bar>
хотеть Отправить электронное письмо к List <list@mine>
.Как настроить (без перекомпиляции) exim так Alice
можно отправить электронное письмо на List
который будет перенаправлен на Bob
.
Эта конфигурация работала несколько лет для случаев, когда отправитель был @mine
или все приемники были @mine
. С такой конфигурацией:
open_lists:
driver = redirect
data = ${lookup mysql{...}}}
forbid_pipe
forbid_file
no_more
Что не работает: случай, когда и отправитель, и получатель являются внешними.
Зачем: по какой-то причине (это неправильное поведение, о котором я говорил) exim сохраняет оригинал отправитель конверта (иначе MAIL FROM согласно RFC), который bar
отклоняется из-за сбоя SPF.
Я в курсе SRS и это экспериментальная реализация на exim. Однако помимо того, что он является экспериментальным, он требует включения перекомпиляции. Было бы не страшно, если бы была обновленная убунту PPA с готовыми скомпилированными пакетами, хотя я не нашел ни одного.
Я также знаю переписывание exim у которого есть флаг F
чтобы изменить отправителя конверта (From), но этот флаг нельзя использовать с headers_rewrite
. Это доступно только в разделе перезаписи.
В основном я ищу способ исправить отправитель конверта который, как ожидается, будет list@mine
в этом случае, будь то перезапись или SRS, он должен только поддерживаться.
Вы можете попробовать Подписание адреса обратного пути. Моя реализация предполагает использование локальных доменов, но я видел аналогичные подходы, используемые для переадресованных адресов. Обработка рикошетов немного сложнее, поскольку вам нужно будет восстановить адрес назначения из подписанного адреса.
Если вы пересылаете на внешний адрес, вы можете добавить заголовок отправителя или повторно отправленного. Это может решить проблемы, когда система-получатель проверяет адрес отправителя.
Я использую тяжелую сборку Exim для Ubuntu, и в некоторых случаях она добавляет некоторые повторно отправленные заголовки.
Вы хотите установить Обратный путь в транспорте, выполняющем перенаправление:
http://www.exim.org/exim-html-current/doc/html/spec_html/ch-generic_options_for_transports.html