具有多个 OR 参数的 imap 搜索语法
imap search syntax with multiple OR arguments
我正在使用 Ruby 2.5.3 和邮件 gem (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
我认为语法不正确,因为将搜索限制为仅一个电子邮件地址就可以了。
我需要一些帮助。
OR 接受两个参数,不多也不少。 OR a b
有效,(OR a b)
有效,但 (OR a)
无效。那将是单参数 OR 内的单参数 AND。当解析器遇到结束 AND 参数列表的 )
时,解析器正在寻找 OR 的第二个参数。您查询的最后一部分是 (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)
。在该表达式中,第一个 OR 有两个参数,一个 AND 和另一个 OR,第二个 OR 有两个参数,两个参数都是 AND。
(我同意 OR 和 AND 之间的这种区别有点奇怪。)
我正在使用 Ruby 2.5.3 和邮件 gem (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
我认为语法不正确,因为将搜索限制为仅一个电子邮件地址就可以了。
我需要一些帮助。
OR 接受两个参数,不多也不少。 OR a b
有效,(OR a b)
有效,但 (OR a)
无效。那将是单参数 OR 内的单参数 AND。当解析器遇到结束 AND 参数列表的 )
时,解析器正在寻找 OR 的第二个参数。您查询的最后一部分是 (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)
。在该表达式中,第一个 OR 有两个参数,一个 AND 和另一个 OR,第二个 OR 有两个参数,两个参数都是 AND。
(我同意 OR 和 AND 之间的这种区别有点奇怪。)