我的後綴配置允許透過多個 local_recipient_maps 發送郵件。但是,傳到「proxy:unix:passwd.byname」是專門的殘障人士。這通常會阻止傳遞給本機 UNIX 使用者:
$ getent passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/bin/sh
$ nc localhost 25
220 my.mail.host ESMTP Postfix
helo localhost
250 my.mail.host
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
550 5.1.1 <[email protected]>: Recipient address rejected: User unknown in local recipient table
rcpt to:www-data
550 5.1.1 <www-data>: Recipient address rejected: User unknown in local recipient table
然而今天早上我注意到一封電子郵件被發送到本地 www-data 郵件假脫機文件。向內看,我發現:
- 這是一則訊息從 [電子郵件受保護],由我們網路內的不同主機發送,使用 my.mail.host 作為智慧主機
- 在嘗試重試時,它在 my.mail.host 佇列中保留了幾天
- 然後就反彈了
- 退回郵件被傳送到 my.mail.host 上的「www-data」郵件假脫機文件
所以我的問題是:為什麼會發生這種情況?
答案1
假設
你說
專門停用向「proxy:unix:passwd.byname」的傳遞。這通常會阻止交付給本地 UNIX 用戶。
因此,我可能假設您從 中刪除了 proxy:unix:passwd.byname 部分local_recipient_maps
。預設情況下該參數的值為
# postconf -d local_recipient_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
然後你把它改成
# postconf local_recipient_maps
local_recipient_maps = $alias_maps
分析
那麼為什麼它會拒絕正常郵件,但退回郵件仍然會通過呢?
要回答這個問題,我們需要看到大局Postfix 架構概述,尤其是當 postfix 收到電子郵件時
trivial-
rewrite(8)
Network -> smtpd(8) | ^
\ v |
Network -> qmqpd(8) -> cleanup(8) -> incoming
/
pickup(8) <- maildrop
^
|
Local -> sendmail(1) -> postdrop(1)
Postfix 僅local_recipient_maps
在檢查透過 收到的電子郵件時進行諮詢smtpd
。為什麼?因為當參數smtpd_reject_unlisted_recipient
值為「yes」或您在 smtpd_*_restrictions 中設定時執行檢查reject_unlisted_recipient
(請注意兩個參數名稱中的單字 smtpd)。看男子會議後了解參數的詳細資訊。預設情況下啟用此檢查。這解釋了為什麼您的測試電子郵件被 postfix 拒絕。
彈跳是postfix架構中的特殊電子郵件。它由 postfix 內部生成,用於向寄件者通知(非)傳遞狀態報告。它流動透過postfix直接進行cleanup, 透過傳遞smtpd
。這就是為什麼www-data
仍然收到退回電子郵件的原因。
解決方案
您可以將其發送到黑洞,而不是拒絕它郵箱_傳輸_映射和丟棄服務。
為此,請設定mailbox_transport_maps
#main.cf
mailbox_transport_maps = hash:/etc/postfix/wwwdata-blackhole
#/etc/postfix/wwwdata-blackhole
www-data discard:silently
現在,每當 www-data 收到電子郵件時,它都會默默地丟棄。