我想將 Postfix 配置為僅重寫不合格的收件人電子郵件地址(即進入電子郵件收件人:部分的地址),以使用我們客戶的商業域名(如 .com)而不是本地我們客戶端環境的內網域,這是 Postfix 重寫無效地址的默認行為。
只是在同一頁面上,對我來說無效地址是不包含“@”符號的地址,因此不是有效的 SMTP 地址
另請注意,作為一個不幸的、令人困惑的情況,此客戶端環境的本地 Intranet 域實際上是一個命名的 .local 域,這可能會導致未知數量的問題,因為“.local”是一個特殊用途的保留頂級域IETF 因此,雖然我認為這實際上并沒有造成問題,但應該說明這一點。這在多播與單播-dns 方面引起了我們之前的問題
細節:
不合格的收件人示例: sam0161
合格收件人示例: [email protected]
本地內網域: ClientDomain.local
公共商業領域: ClientDomain.com
后綴版本: 3.4.13
服務器作業系統: Ubuntu 20.04.4 LTS Focal
預期行為:
命令
date | mail -s "Test Email" sam0161
應該發郵件到
命令
date | mail -s "Test Email" [email protected]
應該發郵件到
[email protected] (IE 它被單獨留下)
實際結果:
date | mail -s "Test Email" sam0161
被發送到
sam0161.Hostname.local
date | mail -s "Test Email" [email protected]
(注意:這部分是正確的,我們希望保持原樣,我將其包括在這里只是為了背景和完整性)
為了實作這一點,我嘗試了以下方法
在 /etc/postfix/main.cf
已配置
mydomain = ClientDomain.com
append_dot_mydomain = 是
append_at_myorigin = 否
myorigin = $我的域名
inet_interfaces = 所有
這些配置選項的邏輯由 postfix.org 中的 local_header_rewrite_clients 描述
重寫來自這些客戶端的郵件中的郵件頭地址,并使用 $myorigin 或 $mydomain 中的域名更新不完整的地址;要么根本不重寫來自其他客戶端的訊息頭,要么重寫訊息頭并使用 remote_header_rewrite_domain 引數中指定的域更新不完整的地址。
已配置
remote_header_rewrite_domain = "clientDomain.com"
邏輯是覆寫所有郵件流量以確保它被重寫,即使在這種環境和設定中,從技術上講,它們都不應該被視為“遠程”客戶端。
已配置
recipient_canonical_maps = 正則運算式:/etc/postfix/recipient_canonical
邏輯是通過正則運算式“強制”收件人重寫。請注意,這對我來說有點奇怪,因為查找表的手動測驗顯示收件人應該被重寫,但是當發送郵件時,收件人地址仍然顯示為 sam0161.Hostname.local
例子:
/etc/postfix/recipient_canonical
!/.*@.*/ @clientDomain.com
postmap -q "sam0161" regexp:/etc/postfix/recipient_canonical
@clientDomain.com
postmap -q "[email protected]" regexp:/etc/postfix/recipient_canonical
(returns nothing, desired behavior)
date | mail -s "Test" sam0161
postfix ignores canonical mapping and sends to hostname.domain.local
postfix/local[65681]: A6E459K616: to=<[email protected]>, relay=local, delay=0.09, delays=0.07/0/0/0.01,
簡而言之,看起來我無法規避將 Postfix 使用的 gethostname() 方法呼叫回傳的“myhostname”值附加到不合格收件人的默認行為。即使我明確地重新定義邏輯以使用不同于本地域的特定域,或者嘗試通過規范地址重寫手動強制使用不同的域。
誰能告訴我我想做的事情是否可行?還是 Postfix 根本不允許您重寫不合格的地址以使用特定域?
uj5u.com熱心網友回復:
這已得到糾正 - 事實證明郵件客戶端不是 postfix 在到達 postfix之前將 .hostname.local 附加到流量中。這意味著正則運算式邏輯永遠不會評估為“真”,因為始終存在“@”符號。
因此,解決方法是做類似的事情
/.*@hostname.local/clientDomain.com
毋庸置疑,這是我在故障排除方面的嚴重失敗,假設問題始于 Postfix 并以 Postfix 結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486449.html
上一篇:如何根據資料撰寫漂亮的URL?
