我会问你是否有可能通过pop3检索未经解决的消息。
Imap具有UNSEEN标志,因此可以使用某些库来完成。
但如果我只有pop3?我怎样才能只检索未加入的邮件?
非常感谢。
答案 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并提供这样的标志。