Mysql 如何使用procmail筛选使用base 64编码的电子邮件
我正在尝试使用base 64编码过滤电子邮件,然后解码邮件正文,然后将其传递以进行进一步过滤,但在邮件头的电子邮件类型上找不到匹配项,我尝试了内容传输编码和内容类型,但在邮件头中找不到匹配项。 以下是我配置的procmailrc:Mysql 如何使用procmail筛选使用base 64编码的电子邮件,mysql,email,ubuntu,procmail,Mysql,Email,Ubuntu,Procmail,我正在尝试使用base 64编码过滤电子邮件,然后解码邮件正文,然后将其传递以进行进一步过滤,但在邮件头的电子邮件类型上找不到匹配项,我尝试了内容传输编码和内容类型,但在邮件头中找不到匹配项。 以下是我配置的procmailrc: DEFAULT=/var/mail/ LOGFILE=$HOME/procmail.log SHELL=/bin/sh msgID="" errorMSG="Error." :0 * (r|R)@domain.com :0fw * ^Content-Transfe
DEFAULT=/var/mail/
LOGFILE=$HOME/procmail.log
SHELL=/bin/sh
msgID=""
errorMSG="Error."
:0
* (r|R)@domain.com
:0fw
* ^Content-Transfer-Encoding:.*base64 | mmencode -u -b
{
:0B
* ^()\/[a-z]+[0-9]+
{ msgID = "$MATCH" }
result=`mysql -uxxx -pxxx -e "select data from table1 where id='"$msgID"'`
..该
|mmencode-u-b
位于错误的位置。您已经将其作为您试图匹配的正则表达式的一部分,当然不会
你可能是说
:0fw
* r@domain\.com
* ^Content-Transfer-Encoding:.*base64
| mmencode -u -b
或者可能
:0
* r@domain\.com
{
:0fw
* ^Content-Transfer-Encoding:.*base64
| mmencode -u -b
#...
}
Procmail配方的一般形式是
:0flags
* conditions
action
在这里,您可以省略使配方无条件的条件;但这项行动是强制性的。你不能漏掉它
如果您更改了内容编码,还应该更新相应的MIME头(当然,除非您在处理完此消息后将其丢弃)
还请注意,
(r | r)
替换是如何不必要的,因为Procmail默认情况下不区分大小写匹配。mmencode不再可用。Base64解码现在是核心实用程序的一部分。使用base64--decode
而不是mmencode-u-b
。要进行匹配,请尝试在*前面不带点<代码>^内容传输编码:*base64。所以整行代码应该是:*^内容传输编码:*base64 | base64--解码
您希望匹配的消息是什么样子的?请在问题中加入一个(小但有用的)样本。DEFAULT
作业看起来也很可疑。您真的有权限在/var/mail
中写入新文件吗;即使你这么做了,你为什么要这么做?是的。我无法在评论中设置新行的格式。谢谢你澄清这一点。而且,如果他们使用的是比2008年更新的操作系统,mmencode将不可用……我不认为这是问题的核心。如果OP使用了这个命令,我想他们可以使用它。当然,指向base64
的指针在前进中很有用。@arikin FWIW base64-d可以用来解码消息体而不是mmencode。coreutils包附带的base64命令应可用于所有现代linux系统。base64
可以处理单个MIME部分,但不能处理整个消息。您需要添加一些包装器脚本来隔离要解码的部分。