2012-10-09 7 views
5

Ich verwende die IMAP-API von gmail, um nach E-Mails zu suchen.IMAP-Kriterien mit mehreren ORs

Ich verwende die OR-Kriterien, um nach anderen Schlüsselwörtern zu suchen. Das funktioniert gut, wenn ich nur eine Ebene gehen, also so etwas wie

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

aber es funktioniert nicht, wenn ich einen längeren Ausdruck wie

Kriterien versuchen, oder Kriterien oder Kriterien oder Kriterien

, die übersetzt zu

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

deutlich zu machen (so weit ich die Syntax verstehen) ich mag im Grunde alle Nachrichten, die entweder gesendet von oder zu ANY eines gegebenen l gesendet ist von E-Mails

Der Fehler, den ich von der libray bekommen ist

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

irgendwelche Vorschläge?

+0

Versuchen ohne Leerzeichen zwischen (und OR – Max

+0

Haben Sie jemals die Arbeit zu – kkurian

+0

@kkurian noch nicht, habe ich es um für jeden durch den Aufruf Ich benutze eine node.js IMAP-Lib, die ich neu schreiben müsste, um max advice zu folgen, werde das später wahrscheinlich tun und die Ergebnisse hier posten – forste

Antwort

4

Verwenden Sie keine Klammern.

IMAP verwendet polnische Notation, die sie nicht brauchen:

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

Es gibt Fälle, in denen Klammern (wie IMAP AND-Operator kann mehr als zwei Operanden nehmen) benötigt werden: https://www.limilabs.com/blog/imap-search-requires-parentheses

+1

Danke für die Antwort, ich würde diese Polnische Notation nennen , da RPN (zumindest auf einem Rechner) den Operator hinter die Operanden stellt –

+0

@RichardA Sie haben Recht –

+0

Ist die polnische Notation auf der RFC dotiert Trauung? –

1

, wenn Sie also Haben Sie N Ausdrücke, die Sie "ODER" zusammen verwenden möchten, würden Sie diese N Ausdrücke mit N-1 "OR" s voranstellen.

In Perl, zum Beispiel, dass sein würde:

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