这是一个简单的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编码问题[已关闭]”的问题不重复 - 这是一个完全不同的问题。
答案 0 :(得分:2)
通常是" base64"程序安装在Linux和MacOS机器上。要在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之外的东西; - )