imap — PHP imap_fetchbody

Я пытался получить сообщение, но безуспешно.

$body = imap_fetchbody($inbox, $email_id, 0);

сообщения без вложений хороши и у меня есть вывод, но с вложениями
дает некоторые сложные выходные данные, из которых html и обычное сообщение кодируются с некоторым (Content-Type), который является частью сообщений Gmail

0

Решение

Вы можете использовать следующий код, чтобы получить текстовую часть составного электронного письма:

<?php

//get the body
$body = imap_fetchbody($inbox, $email_id, 0);

//parse the boundary separator
$matches = array();
preg_match('#Content-Type: multipart\/[^;]+;\s*boundary="([^"]+)"#i', $body, $matches);
list(, $boundary) = $matches;

$text = '';
if(!empty($boundary)) {
//split the body into the boundary parts
$emailSegments = explode('--' . $boundary, $body);

//get the plain text part
foreach($emailSegments as $segment) {
if(stristr($segment, 'Content-Type: text/plain') !== false) {
$text = trim(preg_replace('/Content-(Type|ID|Disposition|Transfer-Encoding):.*?\r\n/is', '', $segment));
break;
}
}
}

echo $text;
?>
2

Другие решения

Это помогло

$ body = imap_fetchbody ($ inbox, $ email_id, 1.1);

0

$body = imap_fetchbody($inbox, $email_id, 1.0);

Кажется, это единственный, кто работает на меня. Я думаю, что первое целое число в последнем параметре представляет раздел электронной почты, поэтому, если оно начинается с нуля, оно будет содержать всю информацию заголовка. Если он начинается с единицы, то он содержит информацию о сообщении. Затем второе целое число, за которым следует точка, является разделом этого раздела. Поэтому, когда я ставлю ноль, он показывает информацию, но когда я ставлю один или два, он ничего не показывает для некоторых электронных писем.

0
По вопросам рекламы [email protected]