2012-10-09 11 views
5

Sto utilizzando l'API IMAP di Gmail per cercare i messaggi.Criteri IMAP con più OR

Io uso il criterio "OR" per cercare parole chiave diverse. Questo metodo funziona bene se vado un solo livello, vale a dire qualcosa come

'UID SEARCH OR (FROM "[email protected]") (TO "[email protected]")' 

tuttavia, non funziona quando provo un'espressione più come

criteri o criteri e criteri o criteri

che si traduce a (per quanto ho capito la sintassi)

'UID SEARCH OR (OR (FROM "[email protected]") (TO "[email protected]")) (OR (FROM "[email protected]") (TO "[email protected]"))' 

chiarire io fondamentalmente voglio tutti i messaggi che vengono spediti da o inviati a qualsiasi di un dato l ist di email

L'errore che ottengo dalla libray è

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

qualche suggerimento?

+0

provare senza spazi tra (e OR – Max

+0

Hai mai questo lavoro – kkurian

+0

@kkurian non ancora, ho lavorato intorno ad esso chiamando per ogni istruzioni separatamente e quindi concatenando gli elenchi. Sto usando un lib di IMAP node.js che dovrei riscrivere per seguire il consiglio massimo. Lo faremo in seguito probabilmente e pubblicheremo i risultati qui – forste

risposta

4

Non utilizzare le parentesi.

IMAP utilizza la notazione polacca che non ha bisogno di loro:

UID SEARCH OR OR FROM [email protected] TO [email protected] OR FROM [email protected] TO [email protected] 

Ci sono casi in cui sono necessarie parentesi (come IMAP operatore può richiedere più di 2 operandi): https://www.limilabs.com/blog/imap-search-requires-parentheses

+1

Grazie per la risposta. , come RPN (almeno su una calcolatrice) mette l'operatore dopo gli operandi –

+0

@RichardA corretto –

+0

La notazione polacca menzionata sul rfc do cumento? –

1

Quindi, se si avere N espressioni che vuoi "OR" insieme, potresti anteporre le N espressioni di N-1 "OR".

In Perl, ad esempio, che sarebbe:?

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