根据.procmailrc文件中的文本将utf8解码为ISO-8859-1邮件

时间:2015-04-18 08:51:12

标签: perl email encoding utf8-decode procmail

开始编写一个简单的procmail收件人,如果在主题中找到“ABC商店:新订单”文本,它将转发邮件。

 :0
    * ^(To|From).*abc@cdefgh.com
    * ^Subject:.*ABC Store: New Order*
    {

不幸的是,来自邮件服务器的邮件消息中的主题字段是MIME编码字语法。

主题:=?UTF-8?B?QUJDIFN0b3JlOiBOZXcgT3JkZXI =?=

上面的主题是utf-8 ISO-8859-1 charset,所以想知道是否有任何机制/脚本/实用程序来解析它并转换为字符串格式,以便我可以应用我的procmail过滤器。

2 个答案:

答案 0 :(得分:12)

在分配给procmail变量之前,您可以使用perl one liner解码Subject:

# Store "may be encoded" Subject: into $SUBJECT after conversion to ISO-8859-1
:0 h
* ^Subject:.*=\?
SUBJECT=| formail -cXSubject: | perl -MEncode=from_to -pe 'from_to $_, "MIME-Header", "iso-8859-1"'

# Store all remaining cases of Subject: into $SUBJECT
:0 hE
SUBJECT=| formail -cXSubject:

# trigger recipe based also on $SUBJECT content
:0
* ^(To|From).*abc@cdefgh.com
* SUBJECT ?? ^Subject:.*ABC Store: New Order
{
....
}

答案 1 :(得分:1)

您应该使用MIME::EncWords

喜欢这个

use strict;
use warnings;
use 5.010;

use MIME::EncWords 'decode_mimewords';

my $subject = '=?UTF-8?B?QUJDIFN0b3JlOiBOZXcgT3JkZXI=?=';
my $decoded = decode_mimewords($subject);
say $decoded;

<强>输出

ABC Store: New Order