![Procmail:将票号发送到名为“ticket@domain”的地址?](https://linux22.com/image/196402/Procmail%EF%BC%9A%E5%B0%86%E7%A5%A8%E5%8F%B7%E5%8F%91%E9%80%81%E5%88%B0%E5%90%8D%E4%B8%BA%E2%80%9Cticket%40domain%E2%80%9D%E7%9A%84%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我希望执行以下操作:
- 用户发送电子邮件至
1234@domain
- Procmail 识别
1234@domain
为发送至的电子邮件ticket+1234@domain
- 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
获取与 bug 跟踪器条目相关的票号并相应转发。这有效。
我想做的事:
防止自动完成错误(用户将ticket+
在收件人字段中输入,并自动完成错误的工单编号)。为了防止这些错误,用户需要发送电子邮件至####@domain
反而的ticket+####@domain
。
大问题:
我可以使用 Procmail 过滤来自的电子邮件并将####@domain
其视为来自 的电子邮件ticket+####@domain
吗?.
答案1
你的问题看起来相当令人困惑,但你所问的问题应该可以通过将最后一行更改为!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:
。同样,这假设收件人系统正确检查信封收件人信息而不是标头(尽管在转发之前替换收件人标头也不会很难添加)。