我想要做的是设置一个发送邮件服务器,该服务器接受来自每个人到特定域(例如example.com
)的邮件,然后针对定义的收件人列表将该邮件发送到指定的第三方地址,并将其他所有内容中继到特定的 IP 地址。
我尝试过这个:
[root@splitter mail]# cat relay-domains
example.com
[root@splitter mail]# cat virtusertable
[email protected] [email protected]
并且大多数域名的转发工作正常 - 它被传送到example.com
MX 指定的主机 - 但异常([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.cf
after 并使用以下命令进行测试sendmail -bt
:
> 3,0 [email protected]
如果一切按预期运行,请重新启动 sendmail。