Zend Mail Pop3仅读取未读消息

时间:2011-07-15 21:57:32

标签: php zend-framework email pop3

我会问你是否有可能通过pop3检索未经解决的消息。

Imap具有UNSEEN标志,因此可以使用某些库来完成。

但如果我只有pop3?我怎样才能只检索未加入的邮件?

非常感谢。

2 个答案:

答案 0 :(得分:2)

POP3不支持未读标记。 Imap确实:-)你可以使用Zend Framework来处理这个问题。

我这样做是为了找到“退回”的邮件:

$subjectIfFailed = 'Delivery Status Notification (Failure)';
$bouncedMails = array();

$params = array(
    'user'     => $config->gmail->user,
    'host'     => $config->gmail->host,
    'password' => $config->gmail->password,
    'port'     => $config->gmail->port,
    'ssl'      => (bool) $config->gmail->ssl, 
);

$mailStorage = new Zend_Mail_Storage_Imap($params);

$count = $mailStorage->count();
$i = 1;

while ($i <= $count) {
    $message = $mailStorage->getMessage($i);

    if ($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN) === false) {

        if (strtolower($message->getHeader('subject')) == 
            strtolower($subjectIfFailed)) {
                  $bouncedMails[] = $message->getHeader('x-failed-recipients');
        }           
    }
    $i++;
}

return $bouncedMails;

答案 1 :(得分:1)

POP3服务器 - 默认情况下 - 一旦删除服务器中的消息。因此,已经读取(获取)的消息不再存在。您需要指定一个选项,它们根据连接保留在服务器上。我不清楚Zend_Mail_Storage_Pop3 API Docs那个告诉你标志/选项是什么,但应该有一个。 Check the docs

修改:只扫描文档。可能是 Zend Framework 中的POP3实现不存在此类标志。可能你可以通过IMAP连接(我担心的不是因为你已经在你的问题中写过IMAP)或者 - 但这意味着你要退出Zend库 - 你可以自己实现PHP imap library PHP Manual那个确实处理pop3并提供这样的标志。