【问题标题】:How to filter email with base 64 encoding using procmail如何使用 procmail 过滤具有 base 64 编码的电子邮件
【发布时间】:2015-08-17 22:36:31
【问题描述】:

我正在尝试使用 base 64 编码过滤电子邮件,然后解码邮件正文,然后将其传递以进行进一步过滤,但它不会从标题中找到与电子邮件类型匹配的内容,我尝试了 Content-Transfer-Encoding和 Content-Type,但从标头中找不到匹配项。 这是我配置的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 不再可用。 base 64 解码现在是核心实用程序的一部分。使用base64 --decode 而不是mmencode -u -b
  • 为了匹配,请尝试在 * 前面不加点。 ^Content-Transfer-Encoding: *base64。所以整行是:* ^Content-Transfer-Encoding: *base64 | base64 --decode
  • 您希望匹配的消息是什么样的?请edit该问题包含一个(小但有用的)示例。
  • DEFAULT 的分配看起来也很可疑。你真的有权限在/var/mail写新文件吗?即使你愿意,你为什么要这样做?

标签: mysql email ubuntu procmail


【解决方案1】:

| 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 不区分大小写匹配。

【讨论】:

  • 是的。我无法在 cmets 中格式化新行。感谢您清除它。此外,如果他们使用 2008 年以后的任何操作系统,则 mmencode 将不可用...
  • 我几乎不认为这是问题的核心。如果 OP 使用了这个命令,我认为它对他们可用。当然,指向base64 的指针在未来很有用。
  • @arikin FWIW base64 -d 可用于解码消息正文而不是 mmencode。 coreutils 包附带的 base64 命令应该可以在所有现代 linux 系统上使用。
  • base64 可以处理单个 MIME 部分,但不能处理整个消息。您需要添加一些包装脚本来隔离您要解码的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 2018-04-15
  • 1970-01-01
  • 2012-07-26
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多