Munpack和Procmail - 获得主题

时间:2017-08-09 08:07:27

标签: python procmail

我使用munpack在电子邮件中保存附件。这有效,但对我的应用程序造成了问题。

电子邮件是从设备生成的,并将其UID广告到主题行。我需要以某种方式从电子邮件中获取主题行并保存图像,或者将主题行添加到munpack在保存文件时创建的.desc文件中。

这是我当前的procmailrc规则:

ATTACH=`echo /home/foo/attachments/camera`
:0 c
* ^To:.*devicemail@mydomain.com
* ^Subject:[^   ]*\/:
| munpack -s $MATCH -q -C $ATTACH

-s似乎不再是一个有效的选项。

不确定该主题位是否正常工作

或者我可以将电子邮件文件发送到python脚本以查找主题行吗?

1 个答案:

答案 0 :(得分:0)

您的作业是useless use of backticks。你只想

ATTACH="/home/foo/attachments/camera"

但如果这是一个静态字符串,将它放在一个变量中并不能真正为你买任何东西。

要实际提取主题,\/之后的内容需要是与所需主题部分相匹配的正则表达式。

:0
* ^To:.*devicemail@mydomain\.com
* ^Subject:[      ]*\/[^        ].+
| munpack -s "$MATCH" -q -C "$ATTACH"

[ ]*标记之前的正则表达式\/会跳过任何前导空格(在括号内,您需要一个标签和一个空格,以匹配任何一个序列)。 [^ ]匹配字段的第一个非空白字符(不是空格,而不是制表符),然后我们使用.+

捕获该行的其余部分

还要注意变量的正确引用。通常,您应该将变量放在双引号中,除非您特别希望shell对该值执行whitespace tokenization and wildcard expansion

我在c之后删除了:0标记,因为我猜你实际上并不希望Procmail也使用此消息做其他事情(但这是推测;如果我错了,一定要把它放回去。)

如果确实munpack不支持-s,那么可能是这样的:

:0
* ^To:.*devicemail@mydomain\.com
* ^Subject:[    ]*\/[^  ].+
| extract "$ATTACH/$MATCH"

其中extract是类似

的脚本
#!/bin/sh
dest=$1
mkdir "$dest.tmp"
munpack -q -C "$dest.tmp"
set -- "$dest.tmp"/*
test -e "$1" || { rmdir "$dest.tmp"; echo "$0: $dest: nothing extracted" >&2; exit 2;}
case $# in 1) mv "$1" "$dest"; rmdir "$dest.tmp"; exit 0;; esac
echo "$0: $dest.tmp contains multiple files; halp!"; exit 1

将其解压缩到一个目录中,如果该目录包含单个文件,则将其移动到最终目标。如果没有提取任何内容,则不执行任如果有多个提取的文件,请使用错误进行挽救。

您当然可以将整个消息传递给Python,但是将功能推送到Python似乎并不是必需或有用的。 (同样,你可能还有其他的背景,以另一种方式提示尺度,但我们不能从你的问题中得到足够的信息来得出这种情况的结论。)