我正在使用Mail :: IMAPClient从imap服务器检索邮件头。它很棒。但是当标题包含[a-z | A-Z | 0-9]之外的任何字符时,我的字符串看起来像这样:
主题:Un message en =?UTF-8?B?ZnJhbsOnYWlzIMOgIGxhignvbg ==?=(原字符串:“Un messageenfrançaisàlacon”)
身体: = C3 = A9aeio = C3 = B9 = C3 = A8 = C3 = A8(原字符串:éaeioùèè)
答案 0 :(得分:14)
正文编码是Quoted-Printable;标题(主题)编码是MIME“encoded-word”编码(base64的“B”类型)。处理这两种情况的最佳方法是将电子邮件传递到能够处理MIME的模块,例如Email::MIME或较旧的和MIME::Lite。
例如:
# $message was retrieved from IMAP
my $mime = Email::MIME->new($message);
my $subject = $mime->header('Subject'); # automatically decoded
my $body = $mime->body_str; # also automatically decoded
但是,如果您需要在整个邮件的上下文之外处理它们,那么还有Encode::MIME::Header和MIME::QuotedPrint等模块。
答案 1 :(得分:7)
quoted-printable编码。它是电子邮件中使用的标准编码。它与Perl的内部字符串格式无关。