1

这是一个简单的 Procmail 配方,用于根据主题过滤电子邮件:

:0
* ^Subject: .*Content to filter
$HOME/Maildir/.INBOX.My_filtered_folder/

上面非常简单的 Procmail 配方可以正常工作。但是有些电子邮件具有 Base64 编码的主题内容,如下例所示:

Subject: =?UTF-8?B?VmlldGFsaXMgUG9sZXBl?=
 =?UTF-8?B?bGwaY29tbWVudPVkIG9u?=
 =?UTF-8?B?IGAgbGlubyBCYWPrcGFj?=
 =?UTF-8?B?a2Vw4oDZcyBGZWxpY3l0eSA=?=
 =?UTF-8?B?c3hjckVkLg==?=

因此,需要首先解码此编码的主题内容,以便能够像上面的配方中那样过滤电子邮件。

在过滤主题内容(在 Debian 7 上)之前,如何在 Procmail 配方中解码此类 base64 编码的电子邮件主题字符串?

这个问题与关于“Sendmail/procmail - 获取邮件发件人和邮件主题,utf8 编码问题 [关闭]”的问题不是重复的——这是一个完全不同的问题。

4

1 回答 1

2

Linux 和 MacOS 机器上通常会安装一个“base64”程序。要在 Perl 中做同样的事情,像这样的命令行调用会起作用:

$ perl -MMIME::Base64 -e  'print decode_base64("QWxhZGRpbjpvcGVuIHNlc2FtZQ==");'

其中 QWxhZGRpbjpvcGVuIHNlc2FtZQ== 是您的 base64 字符串。

在我的 .procmailrc 中,我做了这样的事情:

SUBJECT=`formail -x Subject:`

:0
{
# You would use 'fbw' to scan the body
:0 fw 
# presumably any base64 message will have this content header
* ^Content-Transfer-Encoding: base64
| some-external-app
}

其中“some-external-app”可以是 base64 程序,也可以是合适的 perl 调用:

formail -i "Subject: `perl -MMIME::Base64 -e 'print decode_base64($SUBJECT)' `"

什么的。

在我的机器上(AMD 上的 netBSD 7.1)base64 的工作方式如下:

base64 -d

但是 YMMV 从平台到平台。

此外,现实情况是,电子邮件在野外通常格式不正确,您可能必须调整上述配方以匹配现实。但希望你能明白。

最好在 .procmailrc 中设置 LOGFILE 变量,以便跟踪意外后果。更好的是,使用 procmail 以外的东西 ;-)

于 2017-11-03T07:48:24.867 回答