Php imap_search()未知搜索条件;或;
正在尝试通过php代码构建IMAP搜索查询以过滤掉特定邮件。。。我必须使用“或”搜索条件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
$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
$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);