為什麼 sendmail 會跳過我的規則集 98?
我在 x64 Centos 6.3 上使用 sendmail 8.14.4。並按照adamo提供的說明:如何配置sendmail(或其他郵件伺服器)以接受出站郵件,但不發送出去?將所有郵件發送到特定郵箱,如下所示:
LOCAL_RULE_0 R$* < @ $=w . > $* $#local $: $1 R$* < @ $* . > $* $#local $: quicksilver
這可以很好地與 M4 一起編譯,並將 .cf 文件中的規則與另一個似乎預設存在的文件一起存放。
不幸的是 sendmail 不會將郵件發送到指定的郵箱。
如果我跑
sendmail -d21.12 q@q.com
調試輸出顯示它正在執行 Parse0 但隨後它正在跳過 ParseLocal (98),如下所示:
... rewrite: ruleset Parse0 returns: q < @ q . com . > rewritten as: q < @ q . com . > -----trying rule: < @ > ----- rule fails -----trying rule: $* -----rule matches: $: $> ParseLocal $1 -----skip subr ParseLocal (98) rewritten as: q < @ q . com . > -----trying rule: $* -----rule matches: $: $> Parse1 $1 rewrite: ruleset Parse1 input: q < @ q . com . > ...
一封測試郵件:
echo 'this is a test'| mail -s test_email q@q.com
直接發送到q@q.com
sendmail -bt 0 q@q.com
翻譯為 q@q.com (不翻譯)但奇怪的是
sendmail -bt 3,0 q@q.com
確實翻譯成水銀
所以在這一點上,我最好的猜測是 sendmail 要麼在發送郵件時沒有首先規範化,要麼 sendmail 以某種方式設置為在規則集 0 之後不執行本地規則。
關於為什麼地址沒有被翻譯的任何想法?
好的……我似乎找到了問題……或者至少解決了它。
我在檢查郵件日誌時注意到,在刪除(重新開始)並重新啟動 sendmail 後,郵件日誌沒有重新出現。我讓機器重新啟動只是為了重置所有內容,現在它可以工作了。
每次使用“service sendmail restart”時,我肯定會重新啟動服務,但現在我偶爾會想到它,這表明停止服務失敗。我想該服務可能從未真正正確停止過,因此每次我重新啟動時,它要麼無法啟動,但報告 OK,因為它已經在執行,或者它正在執行第二個實例。這並不能真正解釋為什麼“sendmail -bt”會進行翻譯,除非在調試時,它將配置的單獨副本載入到私有上下文中。
以防萬一其他人發生在這個執行緒中,comp.mail.sendmail 組中的一位同事提出了一種稍微不同的方法,如下所示:
他說,可以使用 SMART_HOST 將所有電子郵件發送到非本地地址。
define(`SMART_HOST',`local:quicksilver')dnl
將重定向到本地帳戶。我檢查了文件,它看起來是解決問題的另一種好方法。