我有一個本地 procmail 用戶“bob”。
如果電子郵件到達且匹配[電子郵件受保護],則不應採取任何動作。
但是,如果電子郵件到達並且是 [anything_else]@domain.com,那麼我想重寫主題行以在主題行前面插入“[垃圾郵件]”。
因此,這是對“bob@”的反向匹配(匹配 bob@ 之外的任何內容),我們保留原始主題行,只是在其前面添加“[spam]”。
我怎麼能用 Procmail 做到這一點?
答案1
你的要求比較不清楚。 Procmail 可以符合任何字串,但是您真的要在訊息中的任何位置尋找該字串嗎?domain.com
為了這條規則的目的,你真的打算忽略沒有包含在其中的訊息嗎?
:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
:0fhw
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
}
\<
和單字邊界\>
阻止像tombob
or 之類的子字串匹配subdomain.complete.org
,並且空括號是一種 hack,因為 Procmail 對於以反斜線開頭的正則表達式很奇怪。
如果您只想查看標題,請HB
從第一個冒號行中刪除“”(您可以保留“”,H
但如果不放置任何標誌,則這是預設設定)。如果您想匹配特定標頭,請將其拼寫出來。如果您想專門檢查收件人,^TO_
巨集可以讓您輕鬆地在許多不同的標頭(To:
、Cc:
等)中執行此操作。
:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
因為我們放棄了HB
標誌,所以我們可以將以前的兩個配方與不同的標誌結合。第二個^TO_
檢查是否包含 的任何位址bob
,但該位址已被先前的否定條件排除。
這仍有一些可能需要進一步探討的極端情況;如果您可以編輯您的問題以澄清它,也許我可以更新它以涵蓋更多基礎知識。
不過,SMTP 並未要求在標頭中拼寫出收件人。典型的情況是,Bcc:
這本質上也是許多郵件清單使用的機制。也許您的 MTA 會在 中拼寫出收件人,Delivered-To:
但嚴格來說,這種類型的過濾器最好在 MTA 中實現。