6

我正在使用 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' ]

有什么建议么?

4

2 回答 2

7

不要使用括号。

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

于 2012-10-23T12:42:40.283 回答
4

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

例如,在 Perl 中,这将是:

$search = join " ", ("OR") x (@exprs - 1), @exprs;
于 2016-02-13T14:34:45.563 回答