Критерии IMAP с несколькими OR

Я использую API IMAP Gmail для поиска писем.

Я использую критерий «ИЛИ» для поиска по разным ключевым словам. Это хорошо работает, если я иду только на один уровень, т.е. что-то вроде

'UID SEARCH OR (FROM "[email protected]") (TO "[email protected]")'

однако это не работает, когда я пытаюсь использовать более длинное выражение, например

критерии ИЛИ критерии ИЛИ критерии или критерии

что переводится (насколько я понимаю синтаксис)

'UID SEARCH OR ( OR (FROM "[email protected]") (TO "[email protected]")) ( OR (FROM "[email protected]") (TO "[email protected]"))'

чтобы было ясно, я в основном хочу, чтобы все сообщения, которые либо отправляются, либо отправляются ЛЮБЫМ из заданного списка адресов электронной почты

Ошибка, которую я получаю от libray,

[ 'A34', 'BAD', 'Could', 'not', 'parse', 'command' ]

какие-либо предложения?


person forste    schedule 09.10.2012    source источник
comment
Попробуйте без пробелов между ( и ИЛИ   -  person Max    schedule 10.10.2012
comment
Вы когда-нибудь заставляли это работать?   -  person kkurian    schedule 14.10.2012
comment
@kkurian еще нет, я работал над этим, вызывая каждое утверждение отдельно, а затем объединяя списки. Я использую библиотеку IMAP node.js, которую мне придется переписать, чтобы следовать максимальному совету. сделаю это позже наверное и выложу результаты здесь   -  person forste    schedule 15.10.2012


Ответы (2)


Не используйте скобки.

IMAP использует польскую нотацию, которая в них не нуждается:

UID SEARCH OR OR FROM [email protected] TO [email protected] OR FROM [email protected] TO [email protected]

В некоторых случаях необходимы круглые скобки (поскольку оператор IMAP AND может принимать более двух операндов): https://www.limilabs.com/blog/imap-search-requires-parentheses

person Pawel Lesnikowski    schedule 23.10.2012
comment
Упоминается ли польская нотация в документе rfc? - person George Daramouskas; 16.06.2016
comment
Это не упоминается явно, скорее вся грамматика SEARCH определена на странице 89 (RFC находится здесь: tools .ietf.org/html/rfc3501#page-89). Также нет явно определенного оператора И, что делает скобки обязательными для некоторых запросов. Я подробно описал это в блоге. - person Pawel Lesnikowski; 09.09.2016

Таким образом, если у вас есть N выражений, которые вы хотите объединить с помощью «ИЛИ», вы должны добавить к этим N выражениям префикс N-1 «ИЛИ».

Например, в Perl это будет:

$search = join " ", ("OR") x (@exprs - 1), @exprs;
person Waxrat    schedule 13.02.2016