如果電子郵件收件者使用者未通過配對測試,procmail 會重寫主旨行

如果電子郵件收件者使用者未通過配對測試,procmail 會重寫主旨行

我有一個本地 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"
}

\<和單字邊界\>阻止像tombobor 之類的子字串匹配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 中實現。

相關內容