как я могу отобразить содержимое электронного письма на веб-сайте?
Я хотел бы отобразить основное содержимое электронного письма. Я пробовал IMAP на php, но что-то ОЧЕНЬ не так. IMAP не принимает текст моего сообщения. Он улавливает ТОЛЬКО подпись в теле. Поэтому я ищу альтернативные методы чтения основного содержимого электронной почты на веб-странице.
Вот оригинал моего электронного письма:
Размытие заявления об отказе от ответственности/авторских прав захватывается IMAP, но больше ничего в тело выставляется на всеобщее обозрение. у кого-нибудь есть альтернативные методы чтения электронной почты с gmail или любого другого сайта, которые могут отображать содержимое на веб-странице?
Я отказался от того, чтобы заставить IMAP прочитать его, потому что никто не смог разобраться в проблеме...Я потратил несколько часов, поэтому я сдаюсь, но вот код...
<?php
/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = '[email protected]';
$password = 'password';
/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
/* grab emails */
$emails = imap_search($inbox,'ALL');
/* if emails are returned, cycle through each... */
if($emails) {
/* begin output var */
$output = '';
/* put the newest emails on top */
rsort($emails);
/* for every email... */
foreach($emails as $email_number) {
/* get information specific to this email */
$overview = imap_fetch_overview($inbox, $email_number, 0);
$message = imap_fetchbody($inbox, $email_number, 2);
echo $message;
echo imap_qprint($message);
$message = imap_qprint($message);
echo imap_8bit ($message);
$DateFormatted = str_replace("-0500", "", $overview[0] -> date);
/* output the email header information */
$output .= $overview[0] -> subject ;
$output .= $DateFormatted ;
//$bodyFormatted = preg_replace("/This e-mail(.*)/","",$message);
//$bodyFormatted = preg_replace("/Ce courriel(.*)/","",$bodyFormatted);
/* output the email body */
$output .= $message;
}
echo $output;
}
/* close the connection */
imap_close($inbox);
?>
4 answers
В дополнение к тому, что предложил ДмитриК,
Добавление приведенного ниже позволяет все работать нормально без случайных знаков "=". Str_replace используется для удаления символов "=", созданных на страницах.
$message = imap_fetchbody($inbox, $email_number, "1.1");
$message = str_replace("=", "", $message);
Я не знаю на 100%, почему "=" генерируются случайным образом, но это, скорее всего, связано с какой-то проблемой шифрования со стороны сервера Exchange, поскольку нашему серверу около 10 лет.
Вы имеете дело с сообщениями, состоящими из нескольких частей (посмотрите на образец электронной почты pastebin). В качестве теста попробуйте использовать эту строку:
$message = imap_fetchbody($inbox, $email_number, "1.1");
Версия с простым текстом соответствует версии 1.1 Версия HTML - 1.2 Подпись находится в следующей части - это 2. И это то, что вы получаете в своем примере кода.
Есть ли у вас доступ к исходному содержимому электронной почты (материал со всеми заголовками и т. Д.)
Если да, попробуйте использовать анализатор электронной почты plancacke
Я использовал его раньше с большим успехом.
$emailParser = new PlancakeEmailParser(...raw email content...);
$emailTo = $emailParser->getTo();
$emailSubject = $emailParser->getSubject();
$emailCc = $emailParser->getCc();
$emailDeliveredToHeader = $emailParser->getHeader('Delivered-To');
$emailBody = $emailParser->getPlainBody();
$emailHtml = $emailParser->getHTMLBody();
В Gmail есть несколько других настроек IMAP, более внимательно следуйте исходному коду: