foo是一个外部域,其中MTA不在我的控制之下; @foo SPF设置,使mine服务器不能发送电子邮件作为@foo ; bar是另一个外部领域,其中的MTA也是我无法控制的; bar做SPF检查传入的邮件拒绝明确的失败(RFCbuild议和惯例); mine是一个本地域 ,其中MTA是我正在configuration的exim,它已经工作了好几年了,但是现在我们才注意到了一个不正常的行为。 List <list@mine>是Bob <bob@foo>是其成员的邮件列表 (注意:这也可能是一个“转发地址”,但用列表来思考它更简单)。 list@mine成员存储在一个mysql 数据库中 ,这个数据库是在别处pipe理的(这意味着它不是一个静态列表)。 Alice <alice@bar>想要发送一封电子邮件到 List <list@mine> 。 如何configuration(无需重新编译)exim,以便Alice可以发送电子邮件到List将被redirect到Bob 。
对于发件人是@mine或所有接收者都是@mine的情况,这种configuration已经工作了好几年了。 有了这样的configuration:
open_lists: driver = redirect data = ${lookup mysql{...}}} forbid_pipe forbid_file no_more
什么不起作用 :发送者和接收者都是外部的情况。
为什么 :出于某种原因(这是我所说的不当行为),exim保留了原始的信封发件人 (又名邮件来自每个RFC),这是由于SPF失败而拒绝的。
我意识到SRS及其在exim上的实验性实施 。 然而,除了实验,它需要重新编译启用。 如果有一个更新的Ubuntu编译包准备好了,但是我还没有find一个。
我也知道exim的重写有一个标志F来改变信封发送者(From),但是这个标志不能和headers_rewrite一起使用。 它只在重写部分可用。
基本上我正在寻找一种方法来解决在这种情况下,希望是list@mine的信封发件人 ,通过重写或SRS,它只能维护。
您可能要尝试签署返回path地址。 我的实现假定本地域,但我已经看到类似的方法用于转发地址。 处理退回消息有点难度,因为您需要从签名地址重build目标地址。
如果您正在转发外部地址,则可能需要添加发件人或重新发件人标题。 这可能会解决收件人系统validation发件人地址的问题。
我正在使用Ubuntu的重型生成的Exim,在某些情况下,它会添加一些resent标头。
你想在redirect传输中设置return_path :
http://www.exim.org/exim-html-current/doc/html/spec_html/ch-generic_options_for_transports.html