我正在尝试使用 Base 64 编码过滤电子邮件,然后解码邮件正文,然后将其传递以进行进一步过滤,但它找不到 header 中电子邮件类型的匹配项,我尝试了内容传输编码和 Content-Type,但在 header 中未找到匹配项。 这是我配置的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 header (当然,除非您在完成后放弃此消息)。
还请注意 (r|R)
交替是不必要的,因为 Procmail 默认情况下不区分大小写进行匹配。
关于mysql - 如何使用 procmail 过滤采用 Base 64 编码的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060808/