exim 仅为一台路由器重写信封-from

exim 仅为一台路由器重写信封-from

您可以在路由器中添加 headers_add ,但我看不出有什么办法可以在路由器内或实际上使用路由器触发的相同条件的任何地方更改 SMTP From aka Envelope-From 。

我需要模拟极少数 exim“别名”类型列表扩展的邮递员行为。

例如:如果有人向我发送电子邮件:[电子邮件受保护]地址,由重定向路由器部分处理,只有那时我想将 SMTP From 重写为本地的吗?[电子邮件受保护]

类似于邮递员的处理方式。主要原因:下一级邮件网关的SPF以及外部用户发送的邮件。

我尝试过条件重写规则,但说实话,我以前从未做过这些,而且我陷入了困境。

非常感谢,

蒂姆

答案1

如果您想重写路由器中的信封发件人,请使用该路由器中的“errors_to”操作

errors_to = [email protected]

http://www.exim.org/exim-html-current/doc/html/spec_html/ch-generic_options_for_routers.html 部分说:

如果设置了errors_to 的地址最终通过SMTP 进行传递,则该传递的信封发件人就是errors_to 值,因此传递路由上其他MTA 生成的任何退回邮件也会发送到那里。

答案2

最直接的方法可能是使用脚本/二进制文件的管道来执行任意转换:

begin routers
pass2script:
  driver    = accept
  transport = myscript
  condition = ## every distinction you need ##  

还有交通:

begin transports
myscript:
  driver  = pipe
  command = /path/to/script 

包括标题、空行和正文在内的整个消息将被传递到stdin脚本/二进制文件的。该脚本应读取stdin并在继续后应运行sendmail -t命令以在本地重新提交转换后的消息。我想到的最简单的脚本是下一个:

#!/bin/sh

cat /dev/stdin \
| sed '1 s/[email protected]/[email protected]/' \
| sendmail -t

####

exim将收到修改后的消息并照常进行。您必须确保没有创建路由循环,也没有消息一次又一次地传递到脚本并返回。

此外,您还必须确保exim用户有足够的权限来运行脚本,尤其是包装的sendmail -t命令。可能您必须sudo正确设置规则。

相关内容