Centos6

接受域的所有郵件(來自任何地方),將選定收件人的郵件轉發到特定地址,將所有其他郵件轉發到特定主機

  • November 12, 2015

我想要做的是設置一個 sendmail 伺服器,它接受來自每個人的郵件到特定域(例如,example.com),然後對於定義的收件人列表,將該郵件發送到指定的第三方地址,並將其他所有內容中繼到特定的 IP地址。

我試過這個:

[root@splitter mail]# cat relay-domains 
example.com
[root@splitter mail]# cat virtusertable
divert.test@example.com  new.recipient@example.co.uk

並且大部分域的轉發工作正常 - 它被傳遞到由example.com的 MX 指定的主機 - 但異常 ( divert.test@example.com) 被忽略

我試過這個:

[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
divert.test@example.com  new.recipient@example.co.uk

然後異常郵件被正確拆分,但任何其他使用者在本地被退回(User unknown)。我嘗試將其添加到virtusertable

@example.com           %1@example.com

但是(可能不足為奇)這會導致rewrite: excessive recursion (max 50), ruleset canonify錯誤。

我更喜歡基於 sendmail 的解決方案,因為我可以快速嘗試這些解決方案。如果我對此沒有任何運氣,我會向其他 MTA 開放。如果有人對如何做到這一點有任何想法,我會非常感激他們。

讓我們試試這個:

# 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 個使用者並且你需要讓它與地圖一起使用,這自然不能很好地擴展,但自 5/2014 以來我已經不再是 Postmaster,我有點生疏了。如果你願意,我可以讓它與外部地圖一起工作。

一如既往地記住,sendmail.mc規則的左側與右側用製表符而不是空格分隔,所以不要複製粘貼。還記得重建你的sendmail.cf事後並使用以下方法進行測試sendmail -bt

> 3,0 user1@example.com

如果一切正常,重新啟動 sendmail。

引用自:https://serverfault.com/questions/735837