2015-04-30 45 views
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---------------------------------"; 
} 

回答

1

该类有另一个函数来直接设置消息内容。只需调用$ Parser-> setText($ mail),其中$ mail是IMAP foreach循环中的消息内容。

+0

谢谢,我试过了,但它似乎没有工作。我编辑了上面的代码以显示我所尝试的内容,但我确实发现了这一点,但不确定它的正确与否: 您可以使用的唯一流是STDIN和文件资源。不支持任何需要特定协议的流,如IMAP或POP。您需要先将电子邮件下载到文件,然后将其传递给MimeMailParser。 这是否意味着我只需在阅读之前先保存电子邮件,如果是这样的话,我可以加入标题和正文并使用put_file_contents并将其保存为文本文件或存在特定格式? – user1547410

+0

根据上面的代码,它应该是setText中的$ email而不是$ mail。如果你改变它,它会起作用吗? – theark40

+0

对不起,我尝试了几件事情,一个是试试$ email和$ mail,看看它是否有所作为,不是很合乎逻辑,因为$ mail是所有电子邮件,但我试过它,只是忘了将它切换回$电子邮件,所以基本上任何一种方式都不起作用 – user1547410