Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как получить читабельное тело письма с помощью imap_body?

Иван Петров Ученик (1), на голосовании 1 год назад
Выводит иногда читабельное тело письма, а иногда начинается с:
------==-- bound.158694.salv6yq3ynzqcxrp.vla.yp-c. yandex. net Content-Transfer-Encoding: base64 Content-Type: text/html; charset=utf-8
и далее идет закодированное тело
PGRpdj7CoDwvZGl2PjxkaXY...
Пробовал декодировать с помощью imap_base64 - возвращает пустоту. С помощью base64_decode - возвращает кракозябры "�M4�M4�M4mΛs.... Пробовал их декодировать - не вышло.

Каким универсальным способом привести к читабельному виду тело письма после использования imap_body?
Голосование за лучший ответ
Trovianchik Pro Мастер (1983) 1 год назад
 function getBody($uid, $imap) { 
$structure = imap_fetchstructure($imap, $uid, FT_UID);
$parts = $structure->parts;
$part_number = false;

for ($i = 0; $i < count($parts); $i++) {
if ($parts[$i]->subtype == 'HTML') {
$part_number = $i + 1;
break;
}
}

if (!$part_number) {
for ($i = 0; $i < count($parts); $i++) {
if ($parts[$i]->subtype == 'PLAIN') {
$part_number = $i + 1;
break;
}
}
}

if ($part_number) {
$body = imap_fetchbody($imap, $uid, $part_number, FT_UID);
$encoding = $parts[$part_number - 1]->encoding;

if ($encoding == 3) {
$body = imap_base64($body);
} elseif ($encoding == 4) {
$body = imap_qprint($body);
}

return $body;
}

return '';
}

$server = '{imap.example.com:993/imap/ssl}INBOX';
$username = 'username';
$password = 'password';

$imap = imap_open($server, $username, $password);
$emails = imap_search($imap, 'ALL');

foreach ($emails as $email) {
$uid = imap_uid($imap, $email);
$body = getBody($uid, $imap);
echo $body;
}

imap_close($imap);
Trovianchik ProМастер (1983) 1 год назад
Проблема, с которой вы столкнулись, заключается в том, что письма могут иметь разные форматы и структуры. Вам нужно пройтись по структуре письма и найти нужную часть текста для отображения.
Иван ПетровУченик (1) 1 год назад
А заголовки всегда одного формата и структуры? С анализом заголовков письма не возникнет такой проблемы?
Похожие вопросы