Проблемы с 8-битными письмами типа MIME в php
Хорошо, я пытаюсь в php использовать команды imap для чтения электронных писем из почтового ящика, а затем что-то с ними делать (неважно, что). Я получаю отправляющего хоста, тему и отправителя, а затем тело письма. Если электронное письмо имеет тип MIME "quoted-printable for Text/Html", тогда я могу прочитать его, используя imap_qprint($text). Тем не менее, если MIME типа "8bit для Text / Html", я пытаюсь использовать imap_8bit($text) и по-прежнему получить мусор.
Это код
<?php
$codes = array("7bit","8bit","binary","base64","quoted-printable","other");
$stt = array("Text","Multipart","Message","Application","Audio","Image","Video","Other");
# Connect to the mail server and grab headers from the mailbox
$mail = imap_open('{remote.nh-group.co.uk:110/pop3}', 'itsupport', 'xxxx');
$headers = imap_headers($mail);
?>
<html>
<head>
<title>Reading a Mailbox including multipart emails from within
PHP</title>
</head>
<body>
<?
$pictures = 0;
$html = "";
# loop through each email
for ($n=1; $n<=count($headers); $n++) {
$header = imap_header($mail, $n);
$st = imap_fetchstructure($mail, $n);
$multi = $st->parts;
$nparts = count($multi);
if ($nparts == 0) {
$html2 .= "* SINGLE part email<br>";
} else{
$html2 .= "* MULTI part email<br>";
}
# look at the main part of the email, and subparts if they're present
for ($p=0; $p<=$nparts; $p++) {
$text =imap_fetchbody($mail,$n,$p);
if ($p == 0) {
$it = $stt[$st->type];
$is = ucfirst(strtolower($st->subtype));
$ie = $codes[$st->encoding];
} else {
$it = $stt[$multi[$p-1]->type];
$is = ucfirst(strtolower($multi[$p-1]->subtype));
$ie = $codes[$multi[$p-1]->encoding];
}
# Report on the mimetype
$mimetype = "$it/$is";
$mimeshow .= "<br /><b>Part $p ... ";
$mimeshow .= "Encoding: $ie for $mimetype</b><br />";
# decode content if it's encoded (more types to add later!)
if ($ie == "8bit") {
$body = imap_8bit($text);
}
if ($ie == "base64") {
$body = imap_base64($text);
}
if ($ie == "quoted-printable") {
$body = imap_qprint($text);
}
# If it's a .jpg image, save it (more types to add later)
if ($mimetype == "Image/Jpeg") {
$picture++;
$fho = fopen("imx/mp$picture.jpg","w");
fputs($fho,$realdata);
fclose($fho);
# And put the image in the report, limited in size
$html2 .= "<img src=/demo/imx/mp$picture.jpg width=150><br />";
}
# Add the start of the text to the message
$shorttext = substr($text,0,8000);
if (strlen($text) > 8000) $shorttext .= " ...\n";
$html2.= nl2br(htmlspecialchars($shorttext))."<br>";
}
echo $mimeshow.'<br>';
$subject=$header->subject;
echo '<br>Subject: '.$subject.'<br>';
echo '<br>Sender: '.$header->senderaddress.'<br>';
$splitheader = get_object_vars($header);
$host=$splitheader[from][0]->host;
echo '<br>Header: '.$host.'<br>';
echo $body.'<br>';
}
?>
</body>
</html>
У меня есть два письма в почтовом ящике. Первый кодируется как однокомпонентный 8-битный, а второй - как многочастный с цитируемой для печати
Результаты приведены ниже
Часть 0... Кодировка: 8 бит для текста / HTML
Тема: Это тест для контента билета Билет № 5916 (№ 5916#)
Отправитель: NHG & Clinicare IT & T Support
Заголовок: nh-group.co.uk
MIME-версия: 1.0 Получено: от hsmx05.antispameurope.com (83.246.65.101) от remote.nh-group.co.uk (192.168.1.19) с идентификатором Microsoft SMTP-сервер (TLS) 14.3.123.3; Ср, 1 ноября 2017 19:03:01 +0000 Получено: от delivery.mailspamprotection.com (184.154.208.35) от mx-gate68-hz2.hornetsecurity.com; Ср, 01 ноя. 2017 20:03:01 +0100 Получено: от ns1.ukm17.siteground.biz ([77.104.173.217] helo=3Dukm17.siteground.biz)=09 по se6.mailspamprotection.com с esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)=09(Exim 4.89)=09(конверт из)=09id 1e9yHu-0004pY-L8=09 для it.support@nh-group.co.uk; Ср, 01 ноября 2017 г. 14:02:57 -0500 Получено: от [127.0.0.1] (порт =3D57646 helo=3Dukm17.siteground.biz)=09 от ukm17.siteground.biz с smtp (Exim 4.89_3-0adfb60-XX)=09(конверт из)=09id 1e9yHt-0003cX-9r=09 для it.support@nh-group.co.uk; Ср, 01 ноя. 2017 19:02:53 +0000 Кому: Тема: Это тест на содержание заявки Билет #5916 (#5916#) X-PHP-Originating-Script: 1028:class-phpmailer.php Дата: ср., 1 ноября 2017 г. 19:02:53 +0000 От: NHG & Clinicare IT & T Support Ответ на вопрос: NHG & Clinicare IT & T Support ID сообщения: <8611c203ec1ee6173e753fe4ae3b72c0@corporate.nhg-uk.com> X-Mailer: PHPMailer 5.2.22 ( https://github.com/PHPMailer/PHPMailer) X-Mailer: отличная поддержка /4.3.2 Content-Type: text/html; charset=3D"utf-8" Content-Transfer-Encoding: 8bit X-AntiAbuse: Этот заголовок был добавлен для отслеживания злоупотреблений, пожалуйста, включите его в отчет о злоупотреблении X-AntiAbuse: Основное имя хоста - ukm17.siteground.biz X-AntiAbuse: оригинальный домен - nh-group.co.uk X-AntiAbuse: UID/GID инициатора / вызывающего абонента - [47 12] / [47 12] X-AntiAbuse: адресный домен отправителя - ukm17.siteground.biz X-Get-Message-Sender-Via: ukm17.siteground.biz: нет X-Originating-IP: 77.104.173.217 X-SpamExperts-Domain: ukm17.siteground.biz X-SpamExperts-Username: 77.104.173.217 Результаты проверки подлинности: mailspamprotection.com; auth=3Dpass smtp.auth=3D77.= 104.173.217@ukm17.siteground.biz X-SpamExperts-Outgoing-Class: ham X-SpamExperts-Outgoing-Evidence: Combined (0.09) X-Recommended-Action: принять X-фильтр -ID: EX5BVjFpneJeBchSMxfU5sGO2s1tBb9jz5hUPxV9beEXv9krsgRhBn0ayn6qsU= c7BhTjUfSYCP0C 5wUMIAUTyTj+Ouslq06/9+FJoQ8Ic94JRiSFlfpo3YNCL6gbYMZBRNZBKQKXP9KnqRgOefBfIV= 9l 2lYoidX0QKN0Rp6WDa9d16bf9psWBhnIw8QWTHqFnHl2TRtBFGxCwNLr/WIXTmbEBG2scSEjB4= Сс a3THUkvgvpnunQOsgZPpnjjHtFttCMKZw1tYrnr7rJHHUpEAaqg2HAG29ucnwP0M3OWpRjoXRu= Wz sGtazoE/vPfv1xaxhZcKP/NtHQBPU7HC7F6FoNMf/xm4p5WihZYpa+IEJ/oLosXQp02uZERM5C= В.Д. wD65x9537/7rZ2H1fP4wGxurimbdDoD390nzzgliUnnZRwVrO92GYpEzQCukKCDE/yxRejx+ZE= Н8 3D3uT7G9vVxSoPhN0btnfLiBKgWuU86DjRdgvyO/J5YD0SxG9XoKqN48Eo6Fw5tldaeQTD7oX0= Ib JnLsGIY0M3GhDMueGnYVlMD3E51XI8hjMr6/ д +SExB92w4mbOkVfblh5aYJR7+ZK4eH0+hutvA= HU mPi9Ge+4V1D7jZKXiOlXLdJnBjsNteQCLP3pDMhin+HwPDUna1dtsRiS8klEbdK8qT/SBsZL7w= 6z GAl0Dy9kR6GQ/UE9MSfeA9Gi3qOpaZFBK5mqSVIqVdOvR+fzwQc+c1DSL3/EWMOJs7x5Cx3mJJ= Ws y6OTbpWyPpCPz0F+cvcALILN+ Ogg/Nnx0s/oQjWWHy7qx4hhxCQ7BHN3temh9QhbVJQq9MPSrP= 7L а /OGl9nRw/ г +05rAIG9Wqbj6q4DLIKylFpcDvqmbspbAlPF70Oi5kWG5WrRZ6uKzfnujlezufX= KT FyKo6u83H3djlBrH/4eh02WHu233Y80OmAux3oN13+ztUznegQV1FFKCsIxMyfJ8+4W3u3gmpA= Nv 1DYnwFyGOs036orcJFgN1Xap1jpFsMB9RjtbAFxvtxLn+3ki2FSeoRDxSTwJWw42swm4bO6gac= пМ pzImK0dZ8eeB0y9de0/ НеХ /Z5iLUIRMUDzeIb3XIhs66JoTzHLoQrA7fQYs8PbcVGX4Rd96fmx= 9N Rd596h9beN4f2wGT8e5STWXPcr9VvNyyyTnK4eETwT5QBDJUDAGkO208F/IJRA8ZF8C5AnJBxS= FD JKA40LeuppcmthdVdcHKN13hYPpnTUitS3rpEbXqWxAzJMHFAVLVMimS1MiSrJJu X-отчет-о нарушениях -To: spam@quarantine1.mailspamprotection.com X-antispameurope-sender: tyxanhos@ukm17.siteground.biz X-antispameurope-получатель: it.support@nh-group.co.uk X-antispameurope-MSGID: 3ed646545a31a61c350ff360f4f4604f3 c154a5acbc7065 X-antispameurope-Mailarchiv: электронная почта, архивированная www.antispameurope.com для:= it.support@nh-group.co.uk X-antispameurope-Mailarchivtype: входящий X-antispameurope-Virusscan: CLEAN X-antispamerpe: Этот E-Mail был с законсервировано www.antispameurope.= com E-Mailservice на mx-gate68-hz2 с 03396F0021B X-antispameurope-date: 1509562979 X-antispameurope: ВХОД: X-antispameurope-Connect: delivery.mailspamprotection.com[184.154.208.35], = LS=3D1;EMIG=3D0 X-антиспамевроп-обнаруженная информационная почта: да X-антиспамевроп-WC: 10:602:1:10043:0:145:0:0:0:0:0:0:7:2:1:2:3:118:122:143=:0:1:0:0:0:99:0:0:0:4:0:0:0:0:0:0:1:0:0:0:0:1 X-antispameurope-Spamstatus: CLEAN X-antispameurope-REASON: Счет:-6.1 =09* 0.0 ТЕЛО HTML_MESSAGE: HTML включен в сообщение =09* 0.1 ТЕЛО MIME_HTML_ONLY: Сообщение содержит только текст / html части MIME =09* -4,3 BAYES_00 BODY: вероятность байесовского спама составляет от 0 до 1% =09* [счет: 0,0005] =09* -1,9 ASE_FP_2009_01 ASE 2009 негативный счет Возвращенный путь: tyxanhos@ukm17.siteground.biz X-MS-Exchange-Организация-AuthSource: NHS-EX01.nhs.local X-MS-Exchange-Organization-AuthAs: анонимный
Часть 0... Кодировка: 7 бит для Multipart/Alternative
Часть 1... Кодировка: 7 бит для текста / обычного
Часть 2... Кодировка: цитируемая для печати для текста / HTML
Тема: тест
Отправитель: Уилл Эванс
Заголовок: tyxan.com
тестовое задание
-
Уилл Эванс
m: + xxxxxxxx
w: веб-адрес
Как видите, второе тело $ email дает мне обычный форматированный текст, который я могу использовать. Первый, однако, дает мне... ну, кое-что!
Любые мысли с благодарностью.