Postfix + SpamAssassin:收到的郵件標題更改
我按照大多數網站推薦的此類作業系統設置的說明進行了 Postfix + SpamAssassin 設置。基本上我編輯了我
master.cf
的添加:smtp inet n - - - - smtpd -o content_filter=spamassassin spamassassin unix - n n - - pipe user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
SpamAssassin 實際上執行良好,並且我的電子郵件被過濾了,但是我注意到以下內容。過去,在 SpamAssassin 之前,當一封電子郵件被發送到我的伺服器時,標題會顯示如下內容:
Return-path: <sender@sender-server.dev> Envelope-to: <destination@my-server.dev> Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100 Received: from mail.sender-server.dev ... by mail.my-server.dev
在 SpamAssassin 之後,他們顯示:
Return-path: <sender@sender-server.dev> Envelope-to: <destination@my-server.dev> Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100 Received: from mail.my-server.dev ... by mail.my-server.dev
看起來啟用 SpamAssassin
Received: from
是從電子郵件真正到達我自己的伺服器的原始伺服器更改…為什麼會發生這種情況?不能通過顯示正確標題過濾我的電子郵件的方式來解決此問題嗎?謝謝你。
這是我在@tarleb 研究和幫助後的最終解決方案
我的郵件傳遞是通過
sendmail
程序進行的,該程序在我的電子郵件中添加了一些額外的標題。我可以使用mitter(郵件過濾器)來過濾傳入的電子郵件並放棄sendmail
使用,但是我決定更改為 Dovecot LDA 進行傳遞。我原來的過濾器是,在 Postfix 的開頭
master.cf
:smtp inet n - - - - smtpd -o content_filter=spamassassin
在文件末尾:
spamassassin unix - n n - - pipe user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
我通過以下方式更改了文件的末尾以使用 Dovecot 本地傳遞:
spamassassin unix - n n - - pipe flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e /usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}
現在編輯 Postfix
main.cf
並添加(可選,檢查 (3) 波紋管):spamassassin_destination_recipient_limit = 1
現在您的電子郵件將通過 Dovecot LDA 發送,無需更改標題。對於好奇的人,這裡有一些關於我的配置的細節:
- 此配置可與加地址/子地址/收件人分隔符一起使用(發往收件箱的電子郵件
user+nospam@example.com
將被發送到user@example.com
收件箱) - 這就是為什麼我添加-d ${user}@${nexthop}
這將刪除+
域之前的所有內容。要啟用此功能,請務必添加recipient_delimiter = +
到main.cf
;- 我的標誌
flags=DROhu
,它們沒有添加任何異常但可以在這裡理解:http ://www.postfix.org/pipe.8.html ;spamassassin_destination_recipient_limit = 1
需要確保每個收件人都被 spamassassin 單獨處理。由於D
上面的標誌(包括X-Original-To
標題),這是必需的。**如果您有D
標誌並且您沒有設置spamassassin_destination_recipient_limit = 1
具有多個目的地的電子郵件,則不會送達!**如果您不關心此標頭,則可以刪除該標誌,這不是必需的。編輯:獎勵內容 - 將您的垃圾郵件移動到
Junk
文件夾中!您還可以將 Dovecot 配置為將檢測為垃圾郵件的電子郵件移動到
Junk
IMAP 文件夾。這肯定會讓你的生活更輕鬆。請按照以下說明操作:
- 編輯
/etc/dovecot/conf.d/15-mailboxes.conf
並取消註釋/添加Junk
文件夾(應該在namespace inbox
附近的部分mailbox Trash
):mailbox Junk { special_use = \Junk }
- 安裝;
dovecot-sieve
_apt-get install dovecot-sieve
- 編輯
/etc/dovecot/conf.d/90-sieve.conf
並註釋該行:#sieve = ~/.dovecot.sieve
- 編輯
/etc/dovecot/conf.d/90-plugin.conf
為:plugin { sieve = /etc/dovecot/sieve/default.sieve }
- 編輯
/etc/dovecot/conf.d/15-lda.conf
並/etc/dovecot/conf.d/20-lmtp.conf
匹配:protocol lda/lmtp { # do not copy/paste this line! mail_plugins = $mail_plugins sieve }
警告:您可能在
protocol
選擇項下還有其他設置,請保留它們。文件中的行protocol lda/lmtp
更改,保留原件。 6. 創建文件夾/etc/dovecot/sieve/
7. 使用以下內容創建文件/etc/dovecot/sieve/default.sieve
:require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; }
- 將文件夾權限更改為您的虛擬電子郵件使用者和組,例如:
chown vmail:vmail /etc/dovecot/sieve/ -R
. 如果你錯過了這個鴿舍會抱怨!- 重啟一切:
service postfix restart; service dovecot restart; service spamassassin restart
- 嘗試向伺服器上的某些電子郵件(從外部伺服器)發送電子郵件,首先是普通電子郵件,然後是另一個具有以下主題的電子郵件:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
. 第二封電子郵件應該進入Junk
文件夾,第一封電子郵件應該進入您的收件箱。如果這在您第一次嘗試時不起作用,請查看日誌:
tail -f /var/log/mail.log
並在tail
執行時發送電子郵件。一個好的工作設置應該報告stored mail into mailbox 'INBOX'
或stored mail into mailbox 'Junk'
.