根据 .procmailrc 文件中的文本将 utf8 解码为 ISO-8859-1 邮件
Decode the utf8 to ISO-8859-1 mail subject to text in .procmailrc file
着手编写一个简单的 procmail 收件人,如果在主题中找到文本 "ABC Store: New Order",它将转发邮件。[=11=]
:0
* ^(To|From).*abc@cdefgh.com
* ^Subject:.*ABC Store: New Order*
{
不幸的是,来自邮件服务器的邮件消息中的主题字段采用 MIME 编码字句法。
主题:=?UTF-8?B?QUJDIFN0b3JlOiBOZXcgT3JkZXI=?=
上面的主题是 utf-8 ISO-8859-1 字符集,所以想知道是否有任何 mechanisms/scripts/utilities 来解析它并转换为字符串格式,以便我可以应用我的 procmail 过滤器。
在分配给 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
{
....
}
评论(2020-03-07):转换为 UTF-8 字符集而不是 ISO-8859-* 可能更好。
你应该使用 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
着手编写一个简单的 procmail 收件人,如果在主题中找到文本 "ABC Store: New Order",它将转发邮件。[=11=]
:0
* ^(To|From).*abc@cdefgh.com
* ^Subject:.*ABC Store: New Order*
{
不幸的是,来自邮件服务器的邮件消息中的主题字段采用 MIME 编码字句法。
主题:=?UTF-8?B?QUJDIFN0b3JlOiBOZXcgT3JkZXI=?=
上面的主题是 utf-8 ISO-8859-1 字符集,所以想知道是否有任何 mechanisms/scripts/utilities 来解析它并转换为字符串格式,以便我可以应用我的 procmail 过滤器。
在分配给 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
{
....
}
评论(2020-03-07):转换为 UTF-8 字符集而不是 ISO-8859-* 可能更好。
你应该使用 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