Пытается создать поисковый запрос IMAP для фильтрации определенных почтовых сообщений через php-код ... Вдвигается в ситуацию, когда я должен использовать критерии поиска «ИЛИ».imap_search() неизвестный критерий поиска «ИЛИ»
<?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 Notice: Unknown: Unknown search criterion: OR (errflg=2) in Unknown on line 0
Когда упоминаются php docs for IMAP это говорит документация может быть неточной и направленными на RFC 2060 так Когда речь идет о разделе 6.4.4 для команды поиска, он упоминает, что мы можем использовать OR, NOT и несколько дополнительных критериев поиска ...
так использовали его в положении приставкой, положение инфиксной и попытался использовать круглые скобки, как предложено в RFC 2060, но все напрасно
Также наступил php bug entry, но не уверен, что это ошибка, или ее нужно использовать каким-то другим способом!
Любой, у кого есть решения/обходные пути?
Я бы не перебрать каждую почту и проверять в коде, если она удовлетворяет условие ... Я хотел бы, что можно осуществить с помощью IMAP поиска
Редактировать/Обновление:
Функция imap_search не полностью совместима с IMAP4. с-клиент использовал как сейчас поддерживает только IMAP2 и некоторые критерии поиска не будут доступны для использования, например, «ИЛИ»
Так PHP код похож на:
$inbox = imap_open('{imap.example.com:993/imap/ssl}INBOX', '[email protected]', 'pass123', OP_READONLY);
$search_string = 'SUBJECT "FedEx" OR SUBJECT "USPS"';
$emails = imap_search($inbox, $search_string);
выдаст ошибку говоря "Неизвестный критерий поиска"
наблюдения и ссылки:
мерзавец репо: https://github.com/php/php-src
РНР источник трассировки: (ссылка: https://github.com/php/php-src/blob/master/ext/imap/php_imap.c)
/ext/imap/php_imap.c -> линия №: 4126
imap_search => линия №: 4148
с-клиентский компьютер-источник библиотеки трассировки : не
SRC/с-клиент/mail.c -> линия №: 3973
/docs/internal.txt -> линия №: 1919 => mail_criteria()
критерии IMAP2-форма по критерию поиска строка
ВНИМАНИЕ: Эта функция не принимает критерии поиска IMAP4.
IMAP2 RFC1064 => [ссылка: https://tools.ietf.org/html/rfc1064] [страница: 13]
IMAP4 RFC2060 => [ссылка: http://www.faqs.org/rfcs/rfc2060.html] [раздел: 6.4.4]
Примечание: Основные функции поиска в основном модуле (IMAP) по-прежнему недоступны в PHP. Надеюсь, что это будет доведено до сведения сообщества разработчика ...
Но я не уверен, о чем PHP версия использует IMAP4 совместимый с-клиент ...
- Есть ли способ заставить PHP просто обновить/использовать последнюю библиотеку c-client ?
- Или текущий последний (с 11 апреля 2016 г.) c-клиент поддерживает только IMAP2?
- Следует ли изменить исходный код библиотеки и выполнить компиляцию и установить ?
- Или есть какие-либо другие библиотеки PHP, разработанные 3 стороны, которые мы можно использовать для выполнения того же IMAP (протокол поиска почты, получить для тех почтовых служб, которые не поддерживают oauth2)?
Вы проверили, что на вашем сервере нет ошибки? Многие серверы «offbrand» имеют минимальные или сломанные поисковые реализации. – Max
Похож на ошибку php, глядя на ссылку. Он говорит что-то об использовании нового cclient? – Max
@Max, IMAP-сервер - это сервер gmail ... Очень маловероятно, что imap-сервер неисправен –