目前我有一个解析电子邮件的旧脚本,如下所示:
// 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---------------------------------";
}