Procmail:将票号发送到名为“ticket@domain”的地址?

Procmail:将票号发送到名为“ticket@domain”的地址?

我希望执行以下操作:

  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获取与 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:。同样,这假设收件人系统正确检查信封收件人信息而不是标头(尽管在转发之前替换收件人标头也不会很难添加)。

相关内容