Php imap_search()未知搜索条件;或;

Php imap_search()未知搜索条件;或;,php,search,imap,rfc,Php,Search,Imap,Rfc,正在尝试通过php代码构建IMAP搜索查询以过滤掉特定邮件。。。我必须使用“或”搜索条件 <?php $search_string = 'OR (SUBJECT "FedEx" SUBJECT "USPS")'; $search_string = 'OR SUBJECT "FedEx" SUBJECT "USPS"'; $search_string = 'SUBJECT "FedEx" OR SUBJECT "USPS"'; $search_string = 'OR (SUBJECT "F

正在尝试通过php代码构建IMAP搜索查询以过滤掉特定邮件。。。我必须使用“或”搜索条件

<?php
$search_string = 'OR (SUBJECT "FedEx" SUBJECT "USPS")';
$search_string = 'OR SUBJECT "FedEx" SUBJECT "USPS"';
$search_string = 'SUBJECT "FedEx" OR SUBJECT "USPS"';
$search_string = 'OR (SUBJECT "FedEx") OR (SUBJECT "USPS")';
$search_string = 'OR (SUBJECT "FedEx") (SUBJECT "USPS")';
//all of the search strings when used separately didn't work

$emails = imap_search($inbox, $search_string);
?>
将抛出一个错误,显示“未知搜索条件”

观察和参考:
吉特回购:

PHP源代码跟踪:(参考:)
/ext/imap/php_imap.c->行号:4126
imap_search=>行号:4148

c客户端库源跟踪:
src/c-client/mail.c->行号:3973

/docs/internal.txt->行号:1919=>邮件标准() 条件IMAP2格式搜索条件字符串
警告:此函数不接受IMAP4搜索条件

<?php
$search_string = 'OR (SUBJECT "FedEx" SUBJECT "USPS")';
$search_string = 'OR SUBJECT "FedEx" SUBJECT "USPS"';
$search_string = 'SUBJECT "FedEx" OR SUBJECT "USPS"';
$search_string = 'OR (SUBJECT "FedEx") OR (SUBJECT "USPS")';
$search_string = 'OR (SUBJECT "FedEx") (SUBJECT "USPS")';
//all of the search strings when used separately didn't work

$emails = imap_search($inbox, $search_string);
?>
IMAP2 RFC1064=>[ref:][page:13]
IMAP4 RFC2060=>[参考文献:[章节:6.4.4]

注: 核心模块(IMAP)中的核心搜索功能在PHP中仍然不可用。希望这将引起开发者社区的注意

但我不确定哪个PHP版本使用与IMAP4兼容的c-client

  • 有没有办法强迫php只更新/使用最新的c客户端 图书馆
  • 或者当前最新的(截至2016年4月11日)c-client仅支持IMAP2
  • 我们是否应该修改库源代码并编译 安装
  • 或者是否有其他由第三方开发的PHP库 可以使用来完成相同的(imap协议)邮件搜索、检索 对于不支持OAuth2的邮件提供商);
  • 你试过这个吗

    $inbox   = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'foo@example.com', 'pass123', OP_READONLY);
    
    $search_string = 'SINCE "08-Mar-2011" OR SUBJECT "FedEx" OR SUBJECT "USPS"';
    
    $emails = imap_search($inbox, $search_string);
    

    我用几个imap_搜索语句来模拟“OR”来解决这个问题


    你检查过你的服务器没有bug了吗?许多“非品牌”服务器的搜索实现很少或已中断。查看链接,看起来像是php错误。上面说的是关于使用新的客户端?@Max,IMAP服务器是gmail服务器。。。imap服务器不太可能正常运行faulty@Max,您知道有任何新的与PHP5.4兼容的c客户端库吗?如果是这样,请分享链接…你是否检查了“或”搜索条件是否有效?如果是,请与我分享
    phpinfo()
    。。。我怀疑“c-client”库(我有2007f版本)可能你会有另一个…IMAP“Mark Crespin”的父亲于2012年去世,此后php没有更新IMAP c-client库,而是使用旧的IMAP-2007f版本,该版本只支持IMAP2版本。我们不能期望php IMAP很快会有任何神奇的更新。似乎唯一的方法是使用imap进行多次搜索(与我们查询中的数量或条件成比例。在我的情况下,它超过10个联邦快递、UPS、USPS、DHL等条件)和
    array\u unique()
    /
    array\u intersect()
    消息ID。。。但是如果我的imap用户群持续增加,10次
    imap\u search()
    将杀死我的服务器最后,我也在代码中处理了它,而不是使用搜索字符串。。。我的目标是根据邮件的主题和内容对其进行过滤,因此使用了一点php字符串比较和unix的grep来搜索邮件内容(保存为文件后)。也请阅读我发布的关于其他答案的评论。。。关于使用
    array\u intersect()
    array\u unique()
    $criteria = 'UNSEEN FROM "someaddr@gmail.com"|UNSEEN FROM "@onedomain.com"|UNSEEN FROM "@anotherdomain.org"'
    $criterias = explode('|', $criteria);
    $emails = array();
    foreach ($criterias as $search) {
        $emails_ = imap_search($inbox, $search);
        if ($emails_)
            $emails = array_merge($emails, $emails_);
    }
    $emails = array_unique($emails);