@IvanRivan

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

Выводит иногда читабельное тело письма, а иногда начинается с:
------==-- 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?
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
AccessDenied80
@AccessDenied80
Web разработка
$imap_server = '{imap.example.com:993/imap/ssl}INBOX';
$username = 'user@example.com';
$password = 'password';

// Подключаемся к почтовому серверу
$imap_connection = imap_open($imap_server, $username, $password);

// Выбираем нужный почтовый ящик
imap_select($imap_connection, 'INBOX');

// Получаем структуру письма
$mail_structure = imap_fetchstructure($imap_connection, $mail_id);

// Если письмо содержит альтернативные версии, выбираем нужную версию
if ($mail_structure->type === 1) {
$mail_body = imap_fetchmime($imap_connection, $mail_id, '1', FT_PEEK);
} else {
$mail_body = imap_fetchbody($imap_connection, $mail_id, '1', FT_PEEK);
}

// Если тело письма закодировано, декодируем его
if ($mail_structure->encoding === ENC_BASE64) {
$mail_body = base64_decode($mail_body);
} elseif ($mail_structure->encoding === ENC_QUOTED_PRINTABLE) {
$mail_body = quoted_printable_decode($mail_body);
}

// Выводим полученное тело письма
echo $mail_body;

// Закрываем соединение с почтовым сервером
imap_close($imap_connection);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы