2012-04-01 77 views
4

我正在使用Mail :: IMAPClient從imap服務器檢索郵件標題。它效果很好。但是當標題包含其他任何字符,看起來像這個我送達串[AZ | 0-9 | AZ]:這是什麼Perl編碼的字符串?

  • 主題:UN消息EN = UTF-的8B ZnJhbsOnYWlzIMOgIGxhIGNvbg??? ?== =(原始字符串: 「未消息烯法語點菜CON」)

  • 身體: = C3 = A9aeio = C3 = B9 = C3 = A8 = C3 = A8(原始字符串:éaeioùèè)

    1. 這是什麼奇怪的格式?那是着名的「perl string internal」格式嗎?
    2. 來自IMAP服務器的處理人類成語 的最安全方式是什麼?
+0

如果您打算通過電子郵件進行任何操作,您至少應該對MIME有基本的瞭解。 – tripleee 2012-04-02 06:10:14

回答

14

正文編碼是Quoted-Printable;標題(主題)編碼是MIME「編碼詞」編碼(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::HeaderMIME::QuotedPrint

7

quoted-printable編碼。這是電子郵件中使用的標準編碼。它與Perl的內部字符串格式無關。