将值传递给我的Python脚本的procmal配方

时间:2012-12-10 20:47:36

标签: python procmail

我之前从未使用过procmail,但我相信(从我的R& D)我可能是最好的选择来破解我的谜语。我们的系统收到一封电子邮件,其中我需要3个值:

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

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

  3. 确定电子邮件的类型,我的意思是说" case"或者"项目"。 (我们将其称为" T")此值将从SUBJECT行中解析出来。

  4. 如果有人可以帮我处理这个食谱,我会非常感激。

    接下来我需要做的是:

    1. 将这3个值发送到Python脚本(我可以直接从procmail执行吗?管道?还有其他什么?)
    2. 删除电子邮件
    3. 我需要接受来自4个域名的电子邮件,例如:

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

      最后,是将这3个值传递给第二个脚本,并提供一些关于最佳语法的建议。这里的任何建议都是最值得赞赏的。这会是这样的:

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

      或者看起来怎么样?或者这不是procmail问题和Python问题? (如果是,那很好,我会在那里处理它。)

      非常感谢!

      杰森

1 个答案:

答案 0 :(得分:1)

Procmail可以提取这些值,或者您可以在stdin上将整个消息传递给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来提取Reply-To标头(根据您的评论,这将只提取电子邮件终端;如果您的意思是“别名”,那么请正确定义),而尾随的是4或5在条件中使用特殊运算符\/抓取来自Subject的数字整数。

更新:添加了一个附加条件,仅处理电子邮件,其中From:标头表示其中一个域helpicantfindgoogle.comsearchengineshateme.net或{{1}中的发件人}。

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

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

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

: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:标题中的数字提取到}中的工作方式与以前一样;如果From:条件匹配且Subject:条件匹配,则提取的数字将在$MATCH