1

我以前从未使用过 procmail,但我相信(根据我的研发)这可能是我破解谜语的最佳选择。我们的系统收到一封电子邮件,其中我需要 3 个值,它们是:

  1. 来自 SUBJECT 行的 4 位或 5 位整数。(我们将其称为“N”)

  2. 来自 REPLY-TO 行的电子邮件别名(我们将称为“R”)

  3. 确定它的电子邮件类型,我的意思是说“案例”或“项目”。(我们将称为“T”)这个值将被解析出 SUBJECT 行。

如果有人能帮我做那个食谱,我将不胜感激。

接下来我需要做的是:

  1. 将这 3 个值发送到 Python 脚本(我可以直接从 procmail 执行此操作吗?管道?还有别的吗?)
  2. 删除电子邮件

我只需要接受来自 4 个域名的这些电子邮件,例如:

(@sjobeck.com|@cases.example.com|@messages.example.com|@bounces.example.com)

最后,是将这 3 个值通过管道传输到第二个脚本,并提供一些关于这样做的最佳语法的建议。这里的任何建议都是非常感激的。这会是这样的吗:

this-recipe $N $T $R | second-script.py

或者究竟会是什么样子?或者这不是 procmail 问题和 Python 问题?(如果是,那没关系,我去那边处理。)

非常感谢!

杰森

4

1 回答 1

1

Procmail 可以提取这些值,或者您可以将整个消息传递给标准输入上的 Python。

假设您想要最后的数字并且需要 4 或 5,如下所示:

R=`formail -zxReply-to: | sed 's/.*<//;s/>.*//'`
:0
* ^From:.*@(helpicantfindgoogle\.com|searchengineshateme\.net|disabled\.org)\>
* ^Subject:(.*[^0-9])?\/[0-9][0-9][0-9][0-9][0-9]?$
| scriptname.py --reply-to "$R" --number "$MATCH"

这说明了提取标头值的两种不同技术;通过调用来提取回复标头formail(这将根据您的评论仅提取电子邮件终点;如果您通过“别名”表示其他含义,请正确定义它),而尾随的 4 或 5 数字整数来自主题被我在特殊运算符的条件下匹配\/

更新:添加了一个附加条件,以仅处理 From: 标头指示发件人位于域helpicantfindgoogle.comsearchengineshateme.netdisabled.org.

正如管道操作所暗示的那样,您的脚本将能够读取其标准输入上的触发消息,但如果您不需要它,请不要读取标准输入。

如果交付成功,Procmail 将在此配方完成时停止处理。因此,您不需要显式丢弃匹配的消息。(如果您想继续前进,请使用:0c而不是仅使用:0.)

作为一种效率调整(例如,如果您收到大量电子邮件,并且只需要将其中的一小部分传递给此脚本),您可能希望重构为仅在条件匹配时提取回复:

:0
* ^From:.*@(helpicantfindgoogle.com|searchengineshateme\.net|disabled\.org)\>
* ^Subject:(.*[^0-9])?\/[0-9][0-9][0-9][0-9][0-9]?$
{
  R=`formail -zxReply-To: | sed 's/.*<//;s/>.*//'`
  :0
  | scriptname.py --reply-to "$R" --number "$MATCH"
}

只有同时满足两个条件时才会输入块(和之间的东西{) 。}从 Subject: 标题中提取数字的$MATCH方法与以前一样;如果 From: 条件匹配且 Subject: 条件匹配,则提取的数字将在$MATCH.

于 2012-12-10T21:22:10.740 回答