Попытка создать поисковый запрос IMAP для фильтрации определенных писем с помощью php-кода... Возникла ситуация, когда я должен использовать критерии поиска «ИЛИ».
<?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 для IMAP говорится, что документация может быть неточной и направлена на RFC 2060, поэтому в разделе 6.4.4 для команды поиска упоминается, что мы можем использовать ИЛИ , НЕ и несколько дополнительных критериев поиска...
поэтому использовал его в позиции префикса, позиции инфикса и пытался использовать круглые скобки, как это предлагается в RFC 2060, но все напрасно
Также наткнулся на запись об ошибке php, но не уверен, является ли это ошибкой или нужно использовать как-то иначе!
У кого-нибудь есть решения/обходные пути?
Я бы не хотел перебирать каждое письмо и проверять код, если он удовлетворяет условию... Я бы хотел, чтобы это выполнялось с помощью поиска IMAP.
Изменить/обновить:
Функция imap_search не полностью совместима с IMAP4. c-клиент, используемый на данный момент, поддерживает только 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);
выдает ошибку "Неизвестный критерий поиска"
наблюдения и ссылки:
репозиторий git: https://github.com/php/php-src
Трассировка источника PHP:( ref: https://github.com/php/php-src/blob/master/ext/imap/php_imap.c )
/ext/imap/php_imap.c -> номер строки: 4126
imap_search => номер строки: 4148
трассировка источника библиотеки c-client:
src/c-client/mail.c -> номер строки: 3973
/docs/internal.txt -> номер строки: 1919 => mail_criteria()
критерии Критерии поиска в формате IMAP2 string
ПРЕДУПРЕЖДЕНИЕ. Эта функция не принимает критерии поиска IMAP4.
IMAP2 RFC1064 => [ссылка: https://tools.ietf.org/html/rfc1064 ] [страница: 13]
IMAP4 RFC2060 => [ ref: http://www.faqs.org/rfcs/rfc2060.html ] [раздел: 6.4.4]
Примечание. Основные функции поиска в основном модуле (IMAP) по-прежнему недоступны в PHP. Надеюсь, это будет доведено до сведения сообщества разработчиков...
Но я не уверен, какая версия PHP использует c-client, совместимый с IMAP4...
- Есть ли способ заставить php просто обновить/использовать последнюю библиотеку c-client?
- Или текущий последний (по состоянию на 11 апреля 2016 г.) c-client поддерживает только IMAP2?
- Должны ли мы изменить исходный код библиотеки, скомпилировать и установить?
- Или существуют какие-либо другие PHP-библиотеки, разработанные сторонними компаниями, которые мы можем использовать для выполнения того же самого (поиск почты по протоколу imap, извлечение для тех почтовых провайдеров, которые не поддерживают OAuth2)? сильный>