我管理着一批开发和准备 debian (v.6-8) 服务器。当前的 exim4 设置如下:
- 服务器上没有收到邮件(没有 WAN 连接)
- 外发邮件通过智能主机发送(目前正在运行)
由于阶段和开发服务器的电子邮件功能将通过 Web 应用程序进行测试,并且在我们的 Web 应用程序中设置了真实场景的电子邮件地址,因此我想要实现的设置是:
- 所有外发邮件都应通过 catchall 语句转发到一个电子邮件地址,例如[电子邮件保护]
- 所有包含我们公司域名的外发邮件,例如 *@example.com 和 *@foo.com 都应绕过 catchall 规则。
最接近我的目标的教程是这个,即使它使用相反的策略:允许所有发件人并拒绝一个发件人。
https://serverfault.com/a/577007/322673
任何帮助我都非常感谢,因为我对 exim 配置语法很着迷。
几天来我已经经历了大量的配置示例,但没有一个符合我的用例。
答案1
由于 Exim 按照路由器部分指定的顺序处理邮件,我猜想可以通过以下规则实现。确保首先放置特殊域的规则,然后放置捕获所有规则。
# sender domain based routing
router_for_special_domain_sender:
driver = dnslookup
senders = *@example.com
transport = remote_smtp
no_more
# reciepients domain based routing
router_for_special_domain_reciepints:
driver = dnslookup
domains = example.com
transport = remote_smtp
no_more
catch_all_outgoing:
driver = redirect
data = [email protected]
据进出口银行称文档:
域
如果设置了域选项,则地址的域必须在其定义的域集合中。
发件人
如果设置了此选项,则除非邮件的发件人地址与列表中的某个地址匹配,否则将跳过路由器。请参阅第 3.12 节,了解评估先决条件的顺序列表。
上面的第一条规则告诉 exim 发送所有带有发件人域 example.com 的电子邮件,而无需执行任何特殊操作。第二条规则是捕获所有电子邮件。你可以试一试。
以下是相关讨论:http://www.gossamer-threads.com/lists/exim/users/97056
答案2
begin routers
router_for_special_domain_reciepint:
driver = manualroute
domains = example.com
transport = remote_smtp
route_list = "* internalsmarthost.example.com "
no_more
catch_all_outgoing: driver = redirect data = [email protected]
由于我对 router_for_special_domain_recipient 路由器和 catch_all_outgoing 路由器中的例外情况都使用了智能主机,因此我必须添加 route_list 选项。使用 dnslookup 驱动程序会导致直接将邮件发送到目标,而无需使用智能主机。