|
|
|
| Помогите получить правильную кодировку для тела сообщения используя imap
Мои догадки, что простые письма получается правильно вывести, а состоящие из частей не кодируются
Примеры неправильной кодировки:
письмо 1: "пёп╡п╟п╤п╟п╣п╪я▀п╣ п■п╟п"
письмо 2: "0KHQv9Cw0YHQuNCx0L4sINCQ0LvQtdC90LA hD"
были и такие =C=D=C
Чем пытаюсь вытащить письма
<?php
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>
</title>
</head>
<body>
<?php
$app_col = 1;
$imap = imap_open("{imap.yandex.ru:143/imap/notls}INBOX", "test", "12345");
for ($i = 1; $i <= 20; $i++){
$header = imap_header($imap, $i);
$body = imap_fetchbody($imap, $i, "1.1");
if ($body == ""){
$body = imap_fetchbody($imap, $i, "2.1.1");
}
$email[$i]['from'] = $header->from[0]->mailbox.'@'.$header->from[0]->host;
$email[$i]['fromaddress'] = $header->from[0]->personal;
$email[$i]['to'] = $header->to[0]->mailbox;
$email[$i]['subject'] = $header->subject;
$email[$i]['reply_to'] = $header->reply_to[0]->mailbox.'@'.$header->reply_to[0]->host;
$email[$i]['message_id'] = $header->message_id;
$email[$i]['date'] = $header->udate;
$email[$i]['body'] = $body;
// $email[$i]['body'] = htmlspecialchars(base64_decode($body));
$from = $email[$i]['fromaddress'];
$from_email = $email[$i]['from'];
$elements = imap_mime_header_decode($email[$i]['subject']);
$elements_body = imap_mime_header_decode($email[$i]['body']);
$elements_fromaddress = imap_mime_header_decode($email[$i]['fromaddress']);
$tmp_char = $elements[0]->charset;
$tmp_body_char = $elements_body[0]->charset;
$tmp_texx = $elements[0]->text;
$tmp_body = $elements_body[0]->text;
$tmp_fromaddress = $elements_fromaddress[0]->text;
echo $i."<br>";
$tmp = iconv(strtolower($tmp_char), 'UTF-8', $tmp_texx);
echo "subject: ".$tmp."<br>";
echo "tmp_char: ".$tmp_char."<br>";
//".$tmp_char." ".$email[$i]['subject']."
$struct = imap_fetchstructure($imap,$i);
/*
echo "<pre>";
print_r($struct);
echo "</pre>";
*/
$test_body = imap_fetchbody($imap,$i,1);
if (trim($struct->encoding)=='4')
$test_body = imap_qprint($test_body);
if (trim($struct->encoding)=='3')
$test_body = imap_base64($test_body);
$parms = $struct->parameters[0];
$part = $struct->parts[0];
$test_body = mb_convert_encoding ($test_body, 'UTF-8', $tmp_char);
echo "<span style='color:red;'>".htmlspecialchars($test_body)."</span><br><br><br>";
}
imap_close($imap);
?>
</body>
</html>
|
| |
|
|