如何使用 sendmail 將掃描的郵件重新插入佇列

如何使用 sendmail 將掃描的郵件重新插入佇列

我想將傳入的郵件傳遞virtual_transport給傳輸spamassassin(main.cf:)virtual_transport=spamassassin,然後使用 sendmail 將掃描的郵件重新註入到 postfix 中。

運輸看起來像這樣:

spamassassin unix   -    n     n   -   -    pipe
    flags=hu user=vmail:mail argv=/usr/bin/spamc -u ${recipient} -e /usr/sbin/sendmail -f ${sender} ${recipient}

根據以下內容,這應該是可能的後綴文檔

高容量網站應避免使用透過 Postfix sendmail(1) 和 postdrop(1) 重新註入掃描郵件的「簡單」內容過濾器。

在我目前的 sendmail 呼叫中/usr/sbin/sendmail -f ${sender} ${recipient},郵件會循環傳回佇列,然後回到 spamassassin 等。

根據我對 postfix 文件的理解,使用 postfix 傳遞的郵件sendmail被放入maildrop目錄中,然後使用pickup.我嘗試-o virtual_transport=dovecot在接送運輸中附加 a 以避免排隊,但這沒有幫助。 (我想這些選項只能附加到 smtp 傳輸中)。

如何將使用 spamassassin 掃描的郵件重新註入佇列以進行最終投遞而不導致循環?

答案1

如何將使用 spamassassin 掃描的郵件重新註入佇列以進行最終投遞而不導致循環?

不,你不能

解釋

virtual_transport我了解您使用管道將電子郵件輸入垃圾郵件刺客的原因。您只想掃描發送給您的電子郵件virtual_mailbox_domain。不幸的是它沒有遵循受到推崇的 簡單內容過濾器的設置使用content_filter參數代替virtual_transport

為什麼我無法傳遞virtual_transport到 Pickup 或 smtpd?

一般來說,這裡是跨後綴代碼的電子郵件旅程

Input  --> cleanup --> qmgr --> Output 
*smtpd                          *local     
*pickup                         *virtual
*qmqpd                          *smtp
                                *lmtp
                                *pipe

cleanup守護程式中,postfix 將「路由」您的電子郵件,無論它們屬於虛擬、本地、smtp 或其他傳輸。例外是非空content_filter參數傳遞到輸入服務 ( smtpdpickupqmqpd) 時。發生這種情況時,postfix 將覆蓋訊息路由並將電子郵件傳送到其中content_filter

另請注意,預設情況下所有 postfix 服務都會從中取得參數值,main.cf除非您使用下列命令覆寫它-o 參數=值master.cf。但並非man 5 postconf服務使用的每個參數。例如,內容過濾器只被使用pickupsmtpd所以qmqpd你可以把-o content_filter=amavis:[127.0.0.1:10025在他們。另一個例子,把-o smtp_bind_address因為smtpd該參數僅在smtp服務中使用。

同樣的論點可以應用在你的問題,「為什麼我可以透過-o 虛擬傳輸pickup

因此,這裡有幾種可供您選擇的設置

  • content_filter按照 postfix 文件中的說明使用。缺點是您也會掃描在您的網域之外轉發的電子郵件。

  • 使用content_filter 透過 ACCESS 表和 FILTER 操作。透過這種方式,您可以選擇性地掃描傳入的電子郵件。不幸的是,您必須再次在該表中登記virtual domain。 。您可以透過小心地將 ACCESS 表放置在permit_mynetworks,之後來避免這種情況permit_sasl_authenticated。透過這種方式,已允許發送電子郵件,並且您只需掃描傳入電子郵件。 (歸功於OP評論:) )

  • 使用Postfix 多實例。透過這種方式,您可以保留virtual_transport參數,並且 spamc 會將電子郵件注入到您的第二個實例。然後你可以virtual_transport在不同的實例中定義不同的。但如果您想保持設定簡單,這就有點矯枉過正了。

相關內容