带有多个OR参数的IMAP搜索语法 [英] imap search syntax with multiple OR arguments

查看:19
本文介绍了带有多个OR参数的IMAP搜索语法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是Ruby 2.5.3&;mail gem(2.7.1)。我正在构建IMAP搜索命令,以检索给定电子邮件地址列表和各种自日期的电子邮件。它是搜索电子邮件地址的逻辑或。

我正在使用此电子邮件过滤器:

(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)不起作用。这将是单参数AND中的单参数OR。当遇到)时,解析器正在寻找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)。在该表达式中,第一个OR接受两个参数,即一个AND和另一个OR,第二个OR接受两个参数,这两个参数都是AND。

(我同意OR和AND之间的这种差异有点奇怪。)

这篇关于带有多个OR参数的IMAP搜索语法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆