В настоящее время у меня есть старый скрипт, который анализирует электронную почту, как показано здесь:
// Accessing the mailbox
$mailbox = imap_open("{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX", $mailbox, $mailboxPassword);
// Retrieving only unread messages
$mail = imap_search($mailbox, 'UNSEEN');
// If no new messages found aborting the script
if(empty($mail)) die('No unread emails found!');
$total_found = 0;
$skipped = 0;
// Now we loop through messages
foreach ($mail as $key => $val) {
// process everything
}
Это прекрасно работает, за исключением некоторых проблем с кодировкой русских (кириллических) символов и некоторых других проблем. Несмотря на то, что я мог бы выследить все эти проблемы индивидуально, похоже, что там уже есть отличные классы для разбора почты. я нашел этот, который я хотел бы использовать, как это звучит так часто предлагается.
Пример кода с парсером приведен ниже.
<?php
require_once('MimeMailParser.class.php');
$path = 'path/to/mail.txt';
$Parser = new MimeMailParser();
$Parser->setPath($path);
$to = $Parser->getHeader('to');
$from = $Parser->getHeader('from');
$subject = $Parser->getHeader('subject');
$text = $Parser->getMessageBody('text');
$html = $Parser->getMessageBody('html');
$attachments = $Parser->getAttachments();
?>
Однако, похоже, нужна ссылка на $ path, что меня смущает, так как электронные письма не хранятся в папке, которую вытащил из IMAP
, Буду ли я добавить $path = $mail;
в foreach
блок? Если нет, то в каком формате я должен отправлять письмо парсеру? Должен ли я использовать тот же скрипт, который у меня уже есть, и сохранить его в папке?
Все электронные письма извлекаются из Gmail. я использовал IMAP
но мог бы использовать POP
вместо этого, если IMAP
не будет работать.
Основываясь на предложенном ответе, я попробовал этот код, но он просто перебирает x непрочитанных писем и отображает пустые данные для всего, заголовков и тела?
// Accessing the mailbox
$mailbox = imap_open("{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX", $mailbox, $mailboxPassword);
// Retrieving only unread messages
$mail = imap_search($mailbox, 'UNSEEN');
// If no new messages found aborting the script
if(empty($mail)) die('No unread emails found!');
$total_found = 0;
$skipped = 0;
// Now we loop through messages
foreach ($mail as $email) {
$Parser = new MimeMailParser();
$Parser->setText($mail);
echo "-----------------------------Start Of Email---------------------------------";
echo "<br /><br /><br /><br />";
$to = $Parser->getHeader('to');
echo "To: " . $to . "<br />";
$from = $Parser->getHeader('from');
echo "From: " . $from . "<br />";
$subject = $Parser->getHeader('subject');
echo "Subject: " . $subject . "<br /><br /><br />";
//$text = $Parser->getMessageBody('text');
$html = $Parser->getMessageBody('html');
echo "Body: " . "<br /><br />" . $html . "<br />";
//$attachments = $Parser->getAttachments();
echo "<br /><br /><br /><br />";
echo "-----------------------------End Of Email---------------------------------";
}
Этот класс имеет другую функцию для непосредственной установки содержимого сообщения. Просто вызовите $ Parser-> setText ($ mail), где $ mail — это содержимое сообщения в цикле foreach IMAP.
Других решений пока нет …