php - Zend Mail - 如何在不将电子邮件标记为已打开的情况下阅读

标签 php zend-framework zend-mail

我正在使用通过 zend_mail_storage_imap 扩展的 zend mail,我构建了一个应用程序来查找用户电子邮件中的关键字。

问题是它会打开每封电子邮件并将其标记为已读。有没有办法检查电子邮件的正文而不将每封已检查的邮件标记为已读?

这是当前的工作代码。它是自动查看某人收件箱的 ajax 查询的一部分。在当前的表单中,它将以用户最新邮件开头的每封邮件标记为已读(在 gmail 中)。是否可以检查正文,但不将电子邮件标记为已读。或者,我是否需要在查找之前检查每封邮件是否已读或未读,然后将其恢复到该状态作为解决方法?

if (strpos(htmlentities($storage->getMessage($i)),$searchterm)) 
{
    $fromaddress = str_replace("'","",$storage->getMessage($i)->from);
    $fromaddress = str_replace('"','',$fromaddress);

    $sql = "SELECT `senderemail`,`subscribed` FROM email_spam WHERE `useremail` = '$_SESSION[email_address]' AND `senderemail` = '$fromaddress'";
    $result = mysql_query($sql) or die (mysql_error());

    $num = mysql_num_rows($result);


    if($num == 0)
    {
        $emailmessage = mysql_escape_string($storage->getMessage($i)->getContent());
        $sql_insert = "INSERT into `email_spam` (`message`,`useremail`,`senderemail`,`datetime`,`subscribed`) VALUES ('$emailmessage','$_SESSION[email_address]','$fromaddress',now(),1)";

        mysql_query($sql_insert,$link) or die("Insertion Failed:" . mysql_error());

        $sql = "SELECT `emailid`,`datetime` FROM email_spam WHERE `useremail` = '$_SESSION[email_address]' ORDER BY `datetime` desc";
        $getid = mysql_query($sql) or die (mysql_error());

        $num = mysql_num_rows($getid);

    }

}

编辑 - 这是给感兴趣的人的最终代码

$storage = new Zend_Mail_Storage_Imap($imap);


$flags = $storage->getMessage($i)->getFlags();      
$newflag = $flags[Zend_Mail_Storage::FLAG_RECENT];  
$oldflag = $flags['\Seen'];

if(!empty($flags['\Seen']))
{
    $read=1;
}
else 
{
    $read=0;
}

整个代码是循环的,所以在这里,我对每封电子邮件执行我的整个搜索/排序算法。

if ($read==0)
{
    $storage->setFlags($i, array(Zend_Mail_Storage::FLAG_RECENT)); //marks as new
}   

在这里,我将未读(在实现之前)的电子邮件标记为未读。我认为这是执行此操作的最有效方式(我能找到)。我欢迎任何其他代码或评论。

最佳答案

阅读消息后,您可以取消设置看到的标志。另请参阅 setFlags 方法的 imap 实现。 Api documentation

关于php - Zend Mail - 如何在不将电子邮件标记为已打开的情况下阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3813639/

相关文章:

php - DOMDocument::getElementById 返回 NULL

zend-framework - Zend studio 和 zend 框架中的 b/w application.in、bootstrap.php 和 index.php 有什么区别

php - 覆盖 WooCommerce 类别列表 Walker 的最佳方法

即使使用了 global 关键字,PHP 全局变量在函数内部也是未定义的

php - 表单提交按钮未将名称传递给 php

php - Doctrine 和 Zend_Form 验证

zend-framework - 默认模块中 Controller 的命名空间/前缀

php - Zend Mail - 电子邮件未发送

PHP IMAP POP 转发脚本发送以某种方式更改的图像附件

zend-framework - MIME "multipart/related"结构和 Apple Mail。是错误吗?