Procmail

Procmail:將票號發送到名為“ticket@domain”的地址?

  • September 30, 2021

我希望執行以下操作:

  1. 使用者發送電子郵件至1234@domain
  2. Procmail 辨識1234@domain為發送到的電子郵件ticket+1234@domain
  3. Procmail 配方處理票號並將電子郵件轉發到錯誤跟踪器

大膽我目前的障礙。

這是一個概念證明。此時,使用者仍需將票證發送至ticket+1234@domain電子郵件才能正確轉發:

SUBJECT=`/usr/bin/formail -zx "Subject:"`
:0fhw
* To.*\/([0-9]+)@domain
* MATCH ?? ^\/[0-9]+
|/usr/bin/formail -I "Subject: $SUBJECT (Case $MATCH)"

:0
!tickets@bugtracker

一些上下文:

創建了一個地址,ticket@domain,用於票務處理。目前,使用者發送到ticket+####@domain,Procmail 配方用於$MATCH獲取與錯誤跟踪器條目相關的票號並相應地轉發。這行得通。

我想做什麼

防止自動完成錯誤(使用者將ticket+在收件人欄位中輸入,錯誤的票證 # 會自動完成)。為了防止這些錯誤,使用者需要發送電子郵件而####@domain 不是.ticket+####@domain

大問題:

我可以使用 Procmail 過濾來自的電子郵件####@domain以將其視為來自的電子郵件ticket+####@domain嗎?.

您的問題似乎相當令人困惑,但是只需將最後一行更改為!ticket+$MATCH@domain.

您可能還應該使用^TO_而不是^To:.*.

:0
* ^TO_\/[0-9]+@domain
* MATCH ?? ^\/[0-9]+
{
SUBJECT=`/usr/bin/formail -zx "Subject:"`
:0fhw
|/usr/bin/formail -I "Subject: $SUBJECT (Case $MATCH)"
:0
!ticket+$MATCH@domain
}

我添加了大括號以將賦值和兩個操作置於條件下,這樣您就不會做不必要的工作來提取Subject:或轉發任何MATCH未設置的內容。

(周圍的括號[0-9]+沒有做任何有用的事情,所以我把它們去掉了。也許還要確保你有一個理智PATH而不是硬編碼路徑formail。)

解析收件人資訊的標頭並不完全可靠,因為消息可能以Bcc:. 類似地,這假設收件人系統正確檢查信封收件人資訊而不是標頭(儘管在轉發之前替換收件人標頭也不是很難添加)。

引用自:https://unix.stackexchange.com/questions/671296