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

标签 python procmail

我以前从未使用过 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 问题? (如果是的话也没关系,我去那边处理。)

非常感谢!

杰森

最佳答案

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"

这说明了提取 header 值的两种不同技术; Reply-To header 是通过调用 formail 来提取的(这将根据您的评论仅提取电子邮件终端;如果您通过“别名”指的是其他内容,请正确定义它),而尾随 4主题中的 - 或 5 数字整数是我在条件中使用特殊运算符 \/ 进行匹配时获取的。

更新添加了一个附加条件,仅处理 From: header 指示 helpicantfindgoogle.comsearchengineshateme.net 域之一中的发件人的电子邮件,或disabled.org

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

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

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

: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"
}

仅当满足两个条件时才会输入该 block ({} 之间的内容)。从主题中提取数字到 $MATCH 的工作方式与以前一样;如果“发件人:”条件匹配且“主题:”条件匹配,则提取的号码将位于 $MATCH 中。

关于python - 将值传递给我的 Python 脚本的 procmal 配方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808950/

相关文章:

python - F1 小于 Scikit-learn 中的精度和召回率

python - 如何用 Pandas 数据框中第一行和相应行之间的列的平均值填充特定值

Python Socket 编程简单的 Web 服务器,尝试从服务器访问 html 文件

python - 直接在 scipy.weave.inline 中对复杂的 numpy 数组进行 FFTW3

python - 如何编写 python 脚本来操作谷歌电子表格数据

regex - 如何匹配 procmail 邮件正文中的任何空格?

linux - 使用 procmail 触发应用程序在我的计算机上运行...但我遇到了障碍

mysql - Procmail 配方返回列名和结果