Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于消息UID的PHP imap_搜索_Php_Email_Imap - Fatal编程技术网

基于消息UID的PHP imap_搜索

基于消息UID的PHP imap_搜索,php,email,imap,Php,Email,Imap,是否有任何方法可以使用IMAP_搜索功能在IMAP服务器上搜索邮件。根据php手册,imap_搜索只允许有限数量的搜索选项,按UID搜索不在两者之间: 那么,有没有办法根据UID(高于提供的UID)获取消息呢。自从IMAP4协议修订以来(我想是从2003年开始),这应该得到支持。我相信您已经进行了广泛的搜索,并最终在这里登陆。让我们面对它,这是不可能的;但该功能也有解决办法 也许您可以使用类似的代码: $imap_stream = imap_open($mailbox, $username,

是否有任何方法可以使用IMAP_搜索功能在IMAP服务器上搜索邮件。根据php手册,imap_搜索只允许有限数量的搜索选项,按UID搜索不在两者之间:


那么,有没有办法根据UID(高于提供的UID)获取消息呢。自从IMAP4协议修订以来(我想是从2003年开始),这应该得到支持。

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

也许您可以使用类似的代码:

$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
$imap\u stream=imap\u open($mailbox、$username、$password);
$msg_no=1212//比方说

对于($i=0;$i我确信您已经进行了广泛的搜索并最终在这里登陆。让我们面对现实吧,这是不可能的;但是可以为该功能找到解决方法

也许您可以使用类似的代码:

$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
$imap\u stream=imap\u open($mailbox、$username、$password);
$msg_no=1212;//假设

对于($i=0;$i问题是此代码使用的消息序列号在消息被删除或移动时可能会更改。因此,如果您在最后一条消息处理时存储$msg_no,则会删除5条消息,您将错过接下来到达的5条消息。如果您只希望从最后一条消息中获取消息,则需要存储其UID,然后执行
$msg\u no=imap\u msgno($imap\u stream,$lastUID)
@CodeBaller是的,这似乎更好。同意。问题是,此代码使用的消息序列号在消息被删除或移动时可能会发生变化。因此,如果您在最后一条消息处理时存储$msg_no,那么5条消息被删除,您将错过接下来到达的5条消息。如果您只希望从最后一条消息中获取消息,yo你需要存储它的UID,然后执行
$msg\u no=imap\u msgno($imap\u stream,$lastUID);
@CodeBaller是的,看起来更好。同意。