目前我有一个解析电子邮件的旧脚本,如下所示:
// 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
中提取的文件夹中。我会在foreach
块中添加$path = $mail;
吗?如果没有,我应该以什么格式向解析器提供电子邮件?我必须使用我已经拥有的相同脚本并将其保存到文件夹中吗?
所有的电子邮件都是从Gmail中检索到的。我使用了IMAP
,但如果IMAP
不起作用,可以使用POP
。
根据建议的答案,我尝试了这个代码,但它只是在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是IMAP foreach循环中的邮件内容。