我尝试在 Debian 6 或 7 下配置 exim4,如下所示:
- 对于转发到“虚拟”域的邮件,直接通过 SMTP 发送
- 对于所有其他邮件,请通过 Amazon SES 发送
第一个项目似乎是必要的,因为 SES 不允许发送“发件人”地址与该 AWS 帐户的有效配置域不匹配的消息(如果有人知道使用 SES 执行此操作的方法,那将是一个首选解决方案,尽管我很确定这是不可能的)。
因此,现在该系统与 SES 配合良好;一切都正确发送,exim 配置正确,等等。从那时起,我定义了一些我想要转发的新虚拟域,例如/etc/exim4/virtual/example.com
:
user : [email protected]
然后我创建了一个新的路由器,例如/etc/exim4/conf.d/router/090_exim4-config_virtual_redirect
包含:
sender_redirect:
driver = redirect
domains = dsearch;/etc/exim4/virtual
data = ${lookup{$local_part}lsearch{/etc/exim4/virtual/$domain}}
到目前为止,一切运行正常 - exim 尝试将消息中继到[email protected]
,[email protected]
但由于上面提到的 SES 限制,该过程会失败。
此时,我希望此路由器直接在服务器之间发送消息,而不影响服务器上任何其他邮件的发送。
这可能吗?我感觉这里缺少了一个小补充,但我还没能找到它。
答案1
我能够解决这个问题,而且解决方案非常简单。我使用了一个名为redirect_router
(在这里阅读) 告诉 Exim 开始使用指定的路由器处理当前路由器生成的下一个地址,从而允许它按顺序跳过任何前面的路由器。
然后我将路由器结构定义为:
- Amazon SES 路由器
- 重定向路由器
- 默认路由器链(从
dnslookup_relay_to_domains
Debian 的默认配置开始)
因此我的重定向路由器如下所示:
sender_redirect:
driver = redirect
redirect_router = dnslookup_relay_to_domains
domains = dsearch;/etc/exim4/virtual
data = ${lookup{$local_part}lsearch{/etc/exim4/virtual/$domain}}
还需要编辑该/etc/exim4/update-exim4.conf.conf
文件以确保其example.com
被列为本地域,如下所示(仅显示相关行):
dc_eximconfig_configtype='internet'
dc_other_hostnames='server.hostname.com;example.com'
dc_local_interfaces='0.0.0.0'
该internet
值指示 exim 充当一个互联网站点,直接与其他服务器通信,而不是仅通过智能主机。必须能够通过 SMTP 直接发送和接收邮件。
告诉0.0.0.0
Exim 绑定到所有 IPv4 接口(默认为仅127.0.0.1
允许服务器从远程主机接收邮件)。我不确定是否有更好/更安全的设置,但我不想指定实际的外部 IP,因为它可能会在 EC2 环境中发生变化。
一旦完成所有这些,您就可以执行操作/etc/init.d/exim4 restart
来获取更改,然后一切都应该正常工作。
希望这可以帮助到别人;我不知道这是否是“正确”或“最佳”的方法,但它似乎完美地满足了我的目的。