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 год назад
Проблема, с которой вы столкнулись, заключается в том, что письма могут иметь разные форматы и структуры. Вам нужно пройтись по структуре письма и найти нужную часть текста для отображения.
Каким универсальным способом привести к читабельному виду тело письма после использования imap_body?