2013-08-12 4 views
3

Я ищу предложение поиска IMAP, чтобы получить содержимое GMail «[Gmail]/Вся почта», но отфильтровывать письма, которые находятся в «[ Gmail]/Черновики».Как сформулировать поиск для «HEADER Delivered-To is not empty» в GMail IMAP? (или ПОИСК «[Gmail]/Вся почта» и исключить «/ Черновики»)

IMAP DRAFT флаг не помогает IMAP GMail. Сравнивая полные заголовки, я заметил, что черновики не имеют значения в поле «Поставлено-до» - в заголовке отсутствуют все сообщения в «[Gmail]/Черновики».

Я пробовал поиск UID непосредственно на «[Gmail]/Черновиках», который имеет несколько сообщений со следующим пунктом/результатами:

Я ожидаю, чтобы получить положение, которое не возвращает никаких сообщений - или все сообщения которые Delivered-отсутствующим:

(HEADER Delivered-To "")   <- returns all drafts 
(NOT (HEADER Delivered-To "")) <- negating still returns all drafts! 
(NOT HEADER Delivered-To "")  <- still returns all drafts 
(HEADER Delivered-To NIL)  <- returns no messages - opposite to expected 
(NOT (HEADER Delivered-To NIL)) <- returns all drafts 
(NOT HEADER Delivered-To NIL) <- returns all drafts 
(NOT (DRAFT))     <- returns all drafts 
(DRAFT)       <- returns none - opposite to expected, GMail doesn't seem to flag drafts with DRAFT 

будет оценить предложения, как бы вы сформулировать "HEADER Delivered-To не является пустым" для GMail IMAP.

+1

Вы, кажется, приняли решение, не атакуя проблему более непосредственно. Вы пробовали что-то вроде строки 'UID SEARCH NOT X-GM-LABELS \ Draft'? [Gmail IMAP Extensions] (https://developers.google.com/gmail/imap_extensions) содержит условия поиска для ярлыков, которые, похоже, больше того, что вы хотите. – Max

+0

@ Макс, спасибо за предложение и ссылку! Я согласен с предположением, но должен был «спроектировать» его, не найдя прямого ответа. Пробовал поиск - к сожалению, он терпит неудачу как на «[GMail]/All Mail», так и на «[Gmail]/Drafts» (множественное число) даже без «NOT»: '29: 27.40 imap.gmail.com writer> BGOD4 UID SEARCH (X-GM-LABELS (\ Drafts)) \ r \ n 29: 27.50 imap.gmail.com reader kuz8

+0

@Max, но поиск только для «foo» работает: ' > NBHH4 UID SEARCH (X-GM-LABELS foo) \ r \ n <* ПОИСК \ r \ n', вопрос заключается в том, как искать \ Drafts .. Я использую imaplib2 Python, если это имеет значение. Иногда он дублирует \ как \\ .. Так что все еще '> HIPP4 UID SEARCH (X-GM-LABELS (\ Drafts)) \ r \ n HNEN4 UID SEARCH (X-GM-LABELS \ Drafts) \ r \ n kuz8

ответ

0

Хотя я не был прямым ответом, я в конечном итоге загрузил тела новых сообщений и просматривал их для флагов.

+0

Можете ли вы поделиться кодом? – arshpreet

1
x uid search header "delivered-to" "@" 

Ключ HEADER выполняет поиск поля заголовка с заданным именем, содержащим заданную подстроку. То есть заголовок «foo» «" ищет сообщения, у которых есть поле заголовка foo, пустое или нет. Не существует надлежащего способа поиска сообщений с непустым полем.

Однако вы можете обойти это с помощью взлома в этом случае: каждый непустый Delivered-To содержит знак @, поэтому просто найдите @, и вы получите нужный результат.

+0

Большое спасибо за попытку, я запускаю его с помощью imaplib Python, получил '52: 57.59 MainThread [sync] SELECT ('[Gmail]/Drafts',) 52: 57.75 MainThread state => SELECTED 53: 00.12 MainThread [async] UID ('SEARCH', None, '(ALL) (X UID SEARCH HEADER "Delivered-To" "@")') ' – kuz8

+0

.. даже попытался исправить python lib, чтобы сохранить порядок слов, но все равно не повезло: 26:04.17 MainThread [async] X UID ('SEARCH', None, "HEADER Delivered-To '@'") 26: 04.25 imap.gmail.com обработчик BAD-ответ: Неизвестная команда: X – kuz8

+0

Похоже, вам нужно оставить 'Икс'. Каждая команда IMAP имеет префикс с тегом: вы можете отправлять несколько за раз, а тег помогает устранить неоднозначность. Я ожидаю, что imaplib от Python добавит собственный тег. – arnt