在我无法让我的 Postfix 服务器进行正确的重写后,我尝试使用 Exim 服务器,但在简单的重写中再次失败。
我使用了默认配置,在其中添加了变量,并创建了一个新的路由器,用于将邮件发送到我的私有网络上的两个本地邮件服务器。此路由器是处理线中的第一个,配置如下:
manualroute_domains:
driver = manualroute
domains = lsearch;/etc/exim/relay_hosts
route_data = ${lookup{$domain}lsearch{/etc/exim/relay_hosts}}
transport = remote_smtp
verify_recipient = false
verify_sender = false
从域1到域2的测试邮件已成功传递。
现在我开始在“开始重写”块创建我的第一个重写规则:
[email protected] [email protected] SFfrs
测试结果与我想要的域名重写方式完全一致,但是当我尝试从 domain1 发送邮件时,使用网关作为我的智能主机,收到的邮件总是以 domain1.com 结尾,并且在邮件头中找不到新地址。exim -brw [email protected]
我是否需要在路由器的某个地方声明重写的使用?我想在重写中添加条件,因此header_rewrite
在路由器上使用对我来说不是选项。
提前感谢大家对我的配置提出的想法或意见!
谨致问候 TooCloudy
答案1
您在错误的时间进行重写。S
重写选项指定在收到传入地址时对其进行重写。模式必须与命令中收到的整个地址匹配MAIL FROM
。您可能希望在数据处理期间读取标题时进行重写。
请注意,重写的地址可能会触发垃圾邮件规避措施。特别是,该域的 SPF 记录可能不会将您的主机列为允许的发件人。
尝试使用类似的重写规则:
*@example.com [email protected] Ffrs
如果您想要重写单个地址,/etc/email-aliases
请使用其中一条重写规则。
*@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses}\
{$value}fail}" Ffrs
*@ETC_MAILNAME "${lookup{${local_part}}lsearch{/etc/email-addresses}\
{$value}fail}" Ffrs
您可能需要创建/etc/email-addresses
。虽然它通常受支持,但很少使用。如果您的发件人都在本地域中,则上述规则将起作用,并且应该为所有本地域重写。
如果您需要根据域以及 local_part 进行重写,则需要为虚拟域进行配置。如果您已定义域列表,则virtual_domains
以下重写规则应根据电子邮件别名格式的文件进行重写,/etc/exim4/virtual
其名称类似于email-example.com
。
*@+virtual_domains "${lookup{${local_part}}lsearch{/etc/exim4/virtual/email-${domain}}\
{$value}fail}" Ffrs
或者,您可以使用如下规则匹配文件[email protected]
中的域限定地址:/etc/aliases
*@+local_domains "${lookup{${local_part}@${domain}}lsearch{/etc/email-addresses}\
{$value}fail}" Ffrs
您可以按照 E 中的说明测试重写规则xim4 规范重写章节使用如下命令:
exim -brw [email protected]
别名和 etc-aliases 都应该包含如下行:
local_user: [email protected]