後綴:更改排隊消息中的發件人
完全重新安裝後,我們遇到了配置問題:發件人地址錯誤,一些收件人(郵件伺服器)拒絕了他們。
所以有一堆郵件卡在 Postfix 隊列中。
理想情況下,直接在排隊郵件中更改發件人地址,然後刷新隊列將是最佳選擇。
我嘗試了解決這個問題的答案。但是在我擁有的版本(2.11.0)中,消息似乎不容易修改。
例如,沒有
/var/spool/mqueue
目錄,但是,/var/spool/postfix/...
active bounce corrupt defer deferred dev etc flush hold incoming lib maildrop pid private public saved trace usr
感興趣的目錄是
deferred
. 我嘗試在那裡修改一些文件,用正確的域更改錯誤的域(並小心確保只有那些被更改)。但是隨後,這些郵件被移至
corrupt
,這意味著簡單的文本更改似乎不起作用(用 完成vi
)。還有其他更簡潔的方法來更改排隊郵件中的發件人嗎?
我嘗試了解決這個問題的答案。但是在我擁有的版本(2.11.0)中,消息似乎不容易修改。
例如,沒有 /var/spool/mqueue 目錄,而是 /var/spool/postfix/…
我想澄清兩件事。
- 首先,該答案適用於 sendmail NOT postfix。
- 其次,根本不支持直接操作原始隊列文件。
所以,你有幾個選擇
- smtp_generic_maps 參數
這個答案的靈感來自這個出色的答案。它會自動將舊地址重寫為新地址。您可以定義文件以將舊地址映射到新地址。
/etc/postfix/main.cf: smtp_generic_maps = hash:/etc/postfix/generic /etc/postfix/generic: account@localdomain.example.com account@example.com
不要忘記
postmap /etc/postfix/generic
執行postfix reload
- **好處:**您不需要重新排隊消息
- 缺點: Postfix 會重寫匹配的發件人和收件人
account@localdomain.example.com
地址。
- sender_canonical_address
要克服第一個選項的缺點,您可以使用
sender_canonical_maps
. 這個解決方案基於Postfix 作者的建議。與第一個選項相同,您可以定義文件以將舊地址映射到新地址。/etc/postfix/main.cf: sender_canonical_maps = hash:/etc/postfix/sender_canonical /etc/postfix/sender_canonical: account@localdomain.example.com account@example.com
執行
postmap /etc/postfix/sender_canonical
然後執行postfix reload
。由於後綴隊列的流動,您必須使用命令重新排隊受影響的隊列postsuper -r queueid
- **好處:**後綴不重寫收件人地址。
- **缺點:**您必須重新排隊所有受影響的消息。但是您可以使用單個命令重新排隊所有延遲
postsuper -r ALL deferred
- 直接操作後綴隊列
這是手動修改隊列以進行高級處理的舊方法。這個答案來自postfix-users 郵件列表
簡而言之
- 提取隊列
# postsuper -h queueid # postcat -qbh queueid > tempfile.eml # vi tempfile.eml
- 重新送出隊列並刪除舊隊列
# sendmail -f $sender $recipient < tempfile.eml # postsuper -d queueid
有關上述命令的文件,請參閱此頁面
注意:來自postfix-users mailing lists 的
原始解決方案,用於提取隊列。該命令將提取隊列的頭部、主體和元資訊。正如下面的 Azendale 所指出的,由於元資訊,將拒絕發送此格式錯誤的電子郵件。
postcat -q queueid >tempfile``sendmail
-bh
在參數之外使用參數q
將使 postcat 僅將輸出過濾到 header 和 body,不包括元資訊。這樣做的一個附帶好處是臨時文件採用大多數電子郵件客戶端辨識為 .eml 格式的格式,允許您查看生成的(編輯的)消息。