【问题标题】:IMAP criteria with multiple ORs具有多个 OR 的 IMAP 标准
【发布时间】:2012-09-30 08:32:04
【问题描述】:

我正在使用 gmail 的 IMAP API 来搜索邮件。

我使用“OR”标准来搜索不同的关键字。如果我只进入一个级别,这很有效,即类似

'UID SEARCH OR (FROM "somebody@email.com") (TO "somebody@email.com")'

但是,当我尝试像

这样更长的表达式时,它不起作用

标准或标准或标准或标准

翻译成(据我理解的语法)

'UID SEARCH OR ( OR (FROM "somebodyelse@email.com") (TO "somebodyelse@email.com")) ( OR (FROM "somebody@email.com") (TO "somebody@email.com"))'

为了清楚起见,我基本上想要从给定电子邮件列表中发送或发送到任何给定电子邮件列表的所有消息

我从库中得到的错误是

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

有什么建议吗?

【问题讨论】:

  • 尝试在 ( 和 OR 之间不要有空格
  • 你有没有让这个工作?
  • @kkurian 还没有,我通过分别调用每个语句然后连接列表来解决它。我正在使用一个 node.js IMAP 库,我必须重写它以遵循最大建议。稍后可能会这样做并在此处发布结果

标签: imap gmail-imap


【解决方案1】:

不要使用括号。

IMAP 使用不需要它们的波兰符号:

UID SEARCH OR OR FROM one@mail.com TO one@mail.com OR FROM two@mail.com TO two@mail.com

在某些情况下需要括号(因为 IMAP AND 运算符可以采用 2 个以上的操作数): https://www.limilabs.com/blog/imap-search-requires-parentheses

【讨论】:

  • rfc 文档中是否提到了波兰符号?
  • 没有明确提及,而是在第 89 页定义了整个 SEARCH 语法(RFC 在这里:tools.ietf.org/html/rfc3501#page-89)。也没有明确定义的“AND”运算符,这使得某些查询需要括号。我在博文中详细描述了这一点。
【解决方案2】:

因此,如果您有 N 个要“或”在一起的表达式,则可以在这 N 个表达式前加上 N-1 个“OR”。

例如,在 Perl 中,这将是:

$search = join " ", ("OR") x (@exprs - 1), @exprs;

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2020-03-09
    相关资源
    最近更新 更多