我以前从未使用过 procmail,但我相信(根据我的研发)它可能是破解我的谜题的最佳选择。我们的系统收到一封电子邮件,其中我需要 3 个值,它们是:
SUBJECT 行中的 4 位或 5 位整数。 (我们简称为“N”)
来自 REPLY-TO 行的电子邮件别名(我们将称为“R”)
确定电子邮件的类型,我的意思是说“案例”或“项目”。 (我们将称为“T”)该值将从 SUBJECT 行中解析出来。
如果有人能帮助我完成这个食谱,我将不胜感激。
接下来我需要做的是:
- 将这 3 个值发送到 Python 脚本(我可以直接从 procmail 执行此操作吗?管道?还有其他东西吗?)
- 删除电子邮件
我只需要接受来自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.com
、searchengineshateme.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/