синтаксис поиска imap с несколькими аргументами OR - PullRequest
0 голосов
/ 29 ноября 2018

Я использую Ruby 2.5.3 и почтовый гем (2.7.1).Я структурирую команду поиска IMAP, чтобы получать электронные письма, учитывая список адресов электронной почты и различные даты.Это логическое ИЛИ адресов электронной почты для поиска.

Я использую этот email_filter:

(OR (FROM a1@b.com SINCE 1-Oct-2018) (OR (FROM a2@b.com SINCE 10-Oct-2018) (OR (FROM a3@b.com SINCE 19-Oct-2018))))

, что соответствует форме RFC 3501 ABNR.

Код ruby: для структурирования поиска:

search_options = { count: no_emails_to_process, what: :first, order: :asc, keys: email_filter}
Mail.find(search_options) do |mail, imap, uid, attrs| 
  etc ...

Возникла ошибка:

Error in IMAP command UID SEARCH: Missing argument

Я предполагаю, что синтаксис неправильный, потому что ограничение поиска одним адресом электронной почты работаетхорошо.

Мне нужна помощь.

1 Ответ

0 голосов
/ 29 ноября 2018

ИЛИ принимает два аргумента, ни больше, ни меньше.OR a b работает, (OR a b) работает, но (OR a) не будет работать.Это было бы ИЛИ с одним аргументом внутри ИЛИ с одним аргументом.Парсер ищет второй аргумент для OR, когда он сталкивается с ), который заканчивает список аргументов для AND.Последняя часть вашего запроса: (OR (FROM a3@b.com SINCE 19-Oct-2018)).

Что вы имеете в виду, вероятно, OR (FROM a1@b.com SINCE 1-Oct-2018) OR (FROM a2@b.com SINCE 10-Oct-2018) (FROM a3@b.com SINCE 19-Oct-2018).В этом выражении первое ИЛИ принимает два аргумента, которые являются И и другим ИЛИ, а второе ИЛИ принимает два аргумента, оба из которых являются И.

(Я согласен, что эта разница между ИЛИ и И естьнемного странно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...