2012-04-01 2 views
4

Я использую Mail :: IMAPClient для получения заголовков почтовых ящиков с сервера imap. Он отлично работает. Но когда заголовок содержит какой-либо другой символ, который [AZ | AZ | 0-9] Я служил со строками, которые выглядят следующим образом:В чем заключается эта строка в Perl?

  • Тема: Un сообщение еп = UTF-8 B ZnJhbsOnYWlzIMOgIGxhIGNvbg?? ? == = (исходная строка: "Un сообщение ан français ля жулик")

  • тела: = C3 = A9aeio = С3 = B9 = С3 = A8 = C3 = A8 (исходная строка: éaeioùèè)

    1. Что это за странный формат? Это знаменитый «perl string внутренний» формат?
    2. Что является самым безопасным способом обработки человеческих идиом , исходящих с серверов IMAP?
+0

Если вы планируете вообще что-либо делать с электронной почтой, вы должны приобрести хотя бы базовое знакомство с MIME. – tripleee

ответ

14

Кодирование тела котируется на печать; кодировка заголовка (субъекта) представляет собой кодировку MIME «кодированное слово» (тип «B» для base64). Лучший способ справиться с обоими из них - передать электронное письмо в модуль, способный работать с MIME, например Email::MIME или старше и buggier 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.

7

Он quoted-printable кодируется. Это стандартная кодировка, используемая в электронной почте. Он не имеет ничего общего с внутренним строковым форматом Perl.

Смежные вопросы