接受某个域的所有邮件(来自任何地方),将选定收件人的邮件转发到特定地址,将所有其他邮件转发到特定主机

接受某个域的所有邮件(来自任何地方),将选定收件人的邮件转发到特定地址,将所有其他邮件转发到特定主机

我想要做的是设置一个发送邮件服务器,该服务器接受来自每个人到特定域(例如example.com)的邮件,然后针对定义的收件人列表将该邮件发送到指定的第三方地址,并将其他所有内容中继到特定的 IP 地址。

我尝试过这个:

[root@splitter mail]# cat relay-domains 
example.com
[root@splitter mail]# cat virtusertable
[email protected]  [email protected]

并且大多数域名的转发工作正常 - 它被传送到example.comMX 指定的主机 - 但异常([email protected])被忽略

我尝试过这个:

[root@splitter mail]# cat local-host-names 
example.com
[root@splitter mail]# cat mailertable
example.com      esmtp:[1.2.3.4]
[root@splitter mail]# cat virtusertable
[email protected]  [email protected]

然后异常邮件被正确拆分,但任何其他用户都会在本地被退回(User unknown)。我尝试将其添加到virtusertable

@example.com           %[email protected]

但(可能并不奇怪)这会导致rewrite: excessive recursion (max 50), ruleset canonify错误。

我更喜欢基于 sendmail 的解决方案,因为我可以快速尝试。如果我没有成功,我会向其他 MTA 开放。如果有人知道如何做到这一点,我将不胜感激。

答案1

我们来试试这个:

# Assuming example.com is in $=w
LOCAL_RULE_0
Ruser1 < @ example.com. > $*    $@ newuser1 < @somewhere.com. > 
Ruser2 < @ example.com. > $*    $@ newuser2 < @somewhereelse.com. > 
R$* < @ example.com. > $*    $#esmtp $@ [1.2.3.4] $: $1 < @ example.com. > $2

当然,如果你想让它适用于 10 个以上的用户,并且需要让它与地图一起工作,那么这种方法的扩展性就不好了,但我从 2014 年 5 月起就不再担任邮政局长了,我有点生疏了。不过,如果你愿意的话,我可以让它与外部地图一起工作。

永远记住,sendmail.mc规则的左侧与右侧是用制表符而不是空格分隔的,因此不要复制粘贴。另外请记住重建你的sendmail.cfafter 并使用以下命令进行测试sendmail -bt

> 3,0 [email protected]

如果一切按预期运行,请重新启动 sendmail。

相关内容