我使用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脚本以查找主题行吗?
答案 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似乎并不是必需或有用的。 (同样,你可能还有其他的背景,以另一种方式提示尺度,但我们不能从你的问题中得到足够的信息来得出这种情况的结论。)