【问题标题】:PHP imap_search based on message UID基于消息 UID 的 PHP imap_search
【发布时间】:2012-04-16 11:11:35
【问题描述】:

有没有办法在 IMAP 服务器上搜索邮件,使用 imap_search 功能。根据 php 手册, imap_search 只允许有限数量的搜索选项,并且 UID 搜索不在它们之间: http://us.php.net/manual/en/function.imap-search.php

那么,有没有办法根据 UID(高于提供的 UID)获取消息。这应该从 IMAP4 协议修订版开始支持(我认为从 2003 年开始)。

【问题讨论】:

    标签: php email imap


    【解决方案1】:

    我相信您已经经过广泛的搜索并最终登陆了这里。让我们面对它,这是不可能的;但该功能可能有解决方法。

    也许你可以使用类似这样的代码:

    $imap_stream = imap_open($mailbox, $username, $password);
    $msg_no = 1212; //lets say momentarily
    while(imap_fetchheader($imap_stream, $msg_no)){
        //do some processing
        $msg_no++;
    }// loop will continue till there is no more of newer messages
    

    请注意,这可能会导致最大执行时间,因此您可以使用 for 循环来执行具有特定迭代次数的作业。

    $imap_stream = imap_open($mailbox, $username, $password);
    $msg_no = 1212; //lets say
    for($i=0;$i<=50;$i++){
    if(imap_fetchheader($imap_stream, $msg_no)){
        //do some processing
    }
    $msg_no++;
    } // this will go for 50 times
    

    【讨论】:

    • 问题是此代码使用消息序列号,如果消息被删除或移动,该序列号会发生变化。因此,如果您将 $msg_no 存储为最后处理的消息,则 5 条消息被删除,您将错过接下来到达的 5 条消息。如果您只想获取自上一条消息以来的消息,则需要存储其 UID,然后执行 $msg_no = imap_msgno($imap_stream, $lastUID);
    • @CodeBaller 是的,这似乎更好。同意。
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多