SLY_G
@SLY_G
журналист, переводчик, программист, стартапщик

Что за кодировка в imap?

Пытаюсь на perl раскодировать почту, полученную через imap (использую Net::IMAP::Simple)

Получаю такие строчки:

=?UTF-8?B?RGF2aWQgS3VyZXh5YW4g0L/RgNC40LPQu9Cw0YjQsNC10YIg0JLQsNGBINGB?=

Декодер от Лебедева справился с декодировкой и написал что это base64

Но если попробовать

use MIME::Base64;
print decode_base64('=?UTF-8?B?RGF2aWQgS3VyZXh5YW4g0L/RgNC40LPQu9Cw0YjQsNC10YIg0JLQsNGBINGB?=');


то на выходе пусто.
  • Вопрос задан
  • 14991 просмотр
Пригласить эксперта
Ответы на вопрос 3
return
@return
Это MIME-B, поищите как с ним работать.
Ответ написан
Комментировать
@mithraen
Это декодируется с помощью Encode::MIME::Header.
Кроме B (base64) может еще быть Q (quoted-printable).
Ответ написан
Комментировать
merlin-vrn
@merlin-vrn
Во-первых, не в IMAP, а в почтовом заголовке. Так устроены все не-ASCII почтовые заголовки — внутри допустимы только символы со старшим битом 0, т.е. UTF-8 напрямую недопустим; его кодируют в BASE64 и таким образом помещают в заголовки.

Во-вторых, даже не зная ответ, логично было бы предположить, что =?UTF-8?B? — это «преамбула», описывающая формат последующих данных, от? до? (который не является символом кодировки base64).

В третьих, если у вас заголовок выглядит как
Subject: =?UTF-8?B?bla-bla-bla?=
(пробелы) =?UTF-8?B?bla-bla-bla?=
то все эти строки нужно распаковать независимо и потом сделать конкатенацию.

В общем, читайте RFC5321 и 5322. Конкретный модуль перла подсказали выше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы