MimeMailParser Расширение Настройка IMAP

В настоящее время у меня есть старый скрипт, который анализирует электронную почту, как показано здесь:

// 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---------------------------------";
}

1

Решение

Этот класс имеет другую функцию для непосредственной установки содержимого сообщения. Просто вызовите $ Parser-> setText ($ mail), где $ mail — это содержимое сообщения в цикле foreach IMAP.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]