php – imap_search()未知搜索条件“OR”
尝试构建IMAP搜索查询以通过php代码过滤掉特定邮件…推进到必须使用“OR”搜索条件的情况.
<?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会抛出错误PHP注意:未知:未知搜索条件:OR(第0行)在“未知”第0行 当提到php docs for IMAP它说文档可能不准确并且指向RFC 2060所以当引用6.4.4的搜索命令时,它提到我们可以使用OR,NOT和少量额外的搜索标准…… 所以在前缀位置,中缀位置使用它,并尝试使用RFC 2060中建议的括号,但都是徒劳的 也遇到了php bug entry,但不确定这是一个错误还是需要以其他方式使用! 有解决方案/解决方法吗? 我讨厌迭代每一封邮件并检查代码是否满足条件……我希望通过IMAP搜索完成 编辑/更新: imap_search函数与IMAP4不完全兼容.截至目前使用的c-client仅支持IMAP2,并且某些搜索条件将无法使用,例如“OR” 所以php代码类似于: $inbox = imap_open('{imap.example.com:993/imap/ssl}INBOX','foo@example.com','pass123',OP_READONLY); $search_string = 'SUBJECT "FedEx" OR SUBJECT "USPS"'; $emails = imap_search($inbox,$search_string); 将抛出错误说“未知搜索条件” 观察和参考: PHP源跟踪:(参考号:https://github.com/php/php-src/blob/master/ext/imap/php_imap.c) c-client库源跟踪: /docs/internal.txt – >行号:1919 => mail_criteria() IMAP2 RFC1064 => [ref:https://tools.ietf.org/html/rfc1064] [page:13] 注意: 但我不确定哪个PHP版本使用IMAP4兼容的c-client … >有没有办法强制php只更新/使用最新的c-client 解决方法
我解决了这个做几个imap_search句子来模拟“OR”.
$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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |