Email

如果電子郵件收件人使用者未通過匹配測試,則 procmail 重寫主題行

  • April 16, 2022

我有一個本地 procmail 使用者“bob”。

如果電子郵件到達並與 bob@domain.com 匹配,則不應採取任何措施。

但是,如果電子郵件到達並且

$$ anything_else $$@domain.com 然後我想重寫主題行以插入“$$ spam $$" 在主題行的前面。 所以它是“bob@”的反向匹配(匹配除 bob@ 以外的任何內容),我們保留原始主題行,只是在前面加上“

$$ spam $$“到它的前面。 我怎麼能用 Procmail 做到這一點?

你的要求不太清楚。Procmail 可以匹配任何字元串,但您真的要在消息中的任何位置查找字元串嗎?domain.com為了這條規則的目的,你真的是要忽略沒有消息的消息嗎?

:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
   :0fhw
   * ^Subject:\/.+
   | formail -I"Subject: [spam]$MATCH"
}

和單詞邊界阻止匹配子字元串,如\<or ,空括號是一種黑客攻擊,因為 Procmail 對以反斜杠開頭的正則表達式很奇怪。\>``tombob``subdomain.complete.org

如果您的意思是只想查看標題,請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 中實現。

引用自:https://serverfault.com/questions/1098742