php - 使用 zend_mail 对电子邮件进行排序的最有效方法是什么?

标签 php mysql zend-framework zend-mail

我正在对电子邮件进行分类以查找字符串的特定实例,但花费的时间太长了。我希望将每封电子邮件的时间缩短到半秒,目前每封电子邮件大约需要 2-2.5 秒。

我担心我正在做一些非常愚蠢的事情,这会减慢速度 - 可能是使用 mysql 或 zend_email。这段代码的作用是检查用户的收件箱中是否有特定短语“chocolate”,然后将值返回给 jquery ajax 函数。它循环了十次(在这个版本中,它检查了 10 封电子邮件)。如果您看到任何有助于减少加载时间的内容,我们将不胜感激。最初,我认为不包括库会有所帮助,但没有电子邮件打开功能的库快如闪电。

我确定我正在做一些愚蠢和业余的事情(也许是一些事情)。如果可能,请指出它们。

这是代码...

<?php
        $storage = new Zend_Mail_Storage_Imap($imap);


    $x=0;
    while($x<10)
    {
            $flags = $storage->getMessage($i)->getFlags();      

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

            else 
            {
                $read=0;
            }


        if (strpos($storage->getMessage($i),'chocolate') !== FALSE ) 
        {
            $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)";//        echo $sql_insert;

                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);

                echo '<tr><td>'. $fromaddress . '</td>';

                echo '<td class="unsubscribe_td" align="center"><input type="submit" value="Unsubscribe Me" class="unsubscribe_button" id="'. mysql_result($getid,0,'emailid') .'"/></td></tr>';

            }
        }



        if ($read==0)
        {

            $storage->setFlags($i, array(Zend_Mail_Storage::FLAG_RECENT)); //marks as new
        }   


        $i--;
        $x++;
    }

    ?>

最佳答案

分析这个没有意义 - 这只是错误的方法。您正在为每条消息执行单独的 IMAP 请求和数据传输,这永远不会很快。最有效的方法是根本不在这里进行 - 让 IMAP 服务器为您进行搜索。它可能不像您正在做的那样灵活,但每秒搜索数万条消息不会有问题,而且它当然可以在消息正文中进行简单的字符串匹配。 PHP has support for searching inboxes在 IMAP 扩展中。我不知道该功能是否通过任何 Zend 组件公开,但如果不是,那并不重要。

这正是 iPhone 收件箱搜索使用的机制;它对已有的消息进行本地搜索,但随后提供了在服务器上继续搜索的选项,该选项将交给已经获得数据并具有更大马力的东西。

关于php - 使用 zend_mail 对电子邮件进行排序的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884031/

相关文章:

javascript - 无法使用ajax调用外部函数

php - Codeigniter 中的月度报告

c# - 如何删除DataTable中的行

MySQL 查询提取电子邮件邻居

php - Doctrine 2 带有自定义注释的类元数据

php - Zend使用上下文切换获取xml格式的db数据

php - Magento - 使用自定义环境变量获取敏感数据库信息

php - 如何使 Composer (PSR-4) 与 ".class.php"扩展一起工作?

php mysql AND 运算符

zend-framework - Zend 装饰器 - 在字段元素上添加 css 类?