2017-08-09 21 views
0
在电子邮件

林保存附件与munpack目录。这工作,但对我的应用程序造成问题。Munpack和procmail的 - 让主题行

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

这是我目前procmailrc文件规则:

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

-s似乎并没有一个有效的选择了。

不知道这一点主题作品actualy

或者可能我的电子邮件文件发送到python脚本找出主题行?

+0

我依稀推测'-s'不喜欢接收一个不带引号的冒号作为它的值,这就是你的代码所做的事情(如果传入的消息实际上在Subject头部包含一个冒号;如果不是,条件显然不匹配)。 – tripleee

+0

我快速搜索的'munpack'手册页确实不支持'-s'选项,在这种情况下,您的问题变得更加复杂。 https://linux.die.net/man/1/munpack是否与您的版本一致? (哪个版本,在哪个操作系统上,您使用的是否会使用不同的实用程序可以接受?) – tripleee

回答

0

你的任务是useless use of backticks。你只想要

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

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

要实际提取主题,事\/必须是一个正则表达式,你想要的主体部分进行匹配之后。

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

\/令牌之前的正则表达式[ ]*跳过任何前导空格(括号内,你需要一个标签和一个空格,以匹配任何任何序列)。该[^ ]匹配字段的第一个非空白字符(不占空间,而不是标签),然后我们捕捉行的其余部分与.+

还要注意适当的引用变量。一般情况下,除非你特别希望shell对该值执行whitespace tokenization and wildcard expansion,否则应该将变量放在双引号中。

我删除了c标志:0后,因为我猜你实际上并不需要的Procmail也做其他的事情与此消息(但这是投机性的,如果我错了,通过各种手段把它放回去)。

如果确实munpack不支持-s那么也许是这样的:

:0 
* ^To:.*[email protected]\.com 
* ^Subject:[ ]*\/[^ ].+ 
| extract "$ATTACH/$MATCH" 

其中extract是一个脚本像

#!/bin/sh 
dest=$1 
mkdir "$dest.tmp" 
munpack -q -C "$dest.tmp" 
set -- "$dest.tmp"/* 
test -e "$1" || { rmkdir "$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中似乎没有必要或有益的在这里。 (再一次,你可能会有另外的上下文以另一种方式提示这些尺度,但是我们对你的问题的了解还不够充分,从而得出这样的结论。)

+0

...尽管如此,您至少要保留'c'标志,直到您的配方被正确调试。 – tripleee

+0

[你的其他问题](https://stackoverflow.com/questions/45596111/using-gmail-for-trail-camera)看起来也许尺度正在倾覆,毕竟有利于Python解决方案。不幸的是,Procmail不知道现代MIME的主要部分。 – tripleee