Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用procmail筛选使用base 64编码的电子邮件_Mysql_Email_Ubuntu_Procmail - Fatal编程技术网

Mysql 如何使用procmail筛选使用base 64编码的电子邮件

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

我正在尝试使用base 64编码过滤电子邮件,然后解码邮件正文,然后将其传递以进行进一步过滤,但在邮件头的电子邮件类型上找不到匹配项,我尝试了内容传输编码和内容类型,但在邮件头中找不到匹配项。 以下是我配置的procmailrc:

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部分,但不能处理整个消息。您需要添加一些包装器脚本来隔离要解码的部分。