1
目前我有一个解析电子邮件的旧脚本,如下所示: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
}
能正常工作以外的俄罗斯(斯拉夫)字符和其他一些问题的一些编码问题。虽然我可以单独搜寻所有这些问题,但似乎已经有很好的邮件解析类了。我发现this,我想用它听起来像这经常建议。
提供的示例代码与解析器位于下面。
<?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();
?>
但是它似乎需要这是混淆了我的电子邮件没有保存的文件夹在$路径,从那里拉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---------------------------------";
}
谢谢,我试过了,但它似乎没有工作。我编辑了上面的代码以显示我所尝试的内容,但我确实发现了这一点,但不确定它的正确与否: 您可以使用的唯一流是STDIN和文件资源。不支持任何需要特定协议的流,如IMAP或POP。您需要先将电子邮件下载到文件,然后将其传递给MimeMailParser。 这是否意味着我只需在阅读之前先保存电子邮件,如果是这样的话,我可以加入标题和正文并使用put_file_contents并将其保存为文本文件或存在特定格式? – user1547410
根据上面的代码,它应该是setText中的$ email而不是$ mail。如果你改变它,它会起作用吗? – theark40
对不起,我尝试了几件事情,一个是试试$ email和$ mail,看看它是否有所作为,不是很合乎逻辑,因为$ mail是所有电子邮件,但我试过它,只是忘了将它切换回$电子邮件,所以基本上任何一种方式都不起作用 – user1547410