Сценарии, специфичные для IMAP "Over Quota" - PullRequest
1 голос
/ 28 марта 2012

Я понимаю, что есть ряд библиотек для доступа к IMAP, от Java, Python и т. Д. Но то, что я хочу сделать, очень специфично и противоречит большинству примеров imap.

Простые части:

  • При наличии IMAP-сервера, имени входа и определенного имени папки
  • Обнулить все сообщения в этой папке (или Обнулить папку, если это проще или эффективнее?)

Нетипичные части:

  • Выполнение удаления после каждого удаления N
  • Включение некоторой логики повторения и размера пакета, чтобы занятые серверы - даже удаляли и удаляли по 100 сообщений засессия была бы помощью.
  • НЕ загружайте все заголовки!

Последний вопрос - проблема.Каждый почтовый клиент, который я пробовал, загружает 20 000 заголовков электронной почты - что мне не нужно видеть.

При использовании сценариев POP3 я только что дал последовательные идентификаторы, 1, 2, 3 ...

Но каждый пример IMAP, который я видел, использует поле, полученное из заголовков.Поэтому, возможно, для удаления сообщений IMAP требуется идентификатор, который вы не можете угадать?(и можно получить, только выполнив запрос?)

Если бы мне нужно было получить заголовки, можно ли это сделать как можно более компактным?Или позвольте мне сделать только 100 за раз?

В качестве альтернативы, я попытался удалить всю папку через пользовательский интерфейс почтового клиента, но, похоже, это не работает.Я думаю, что он сначала пытается переместить все заголовки в корзину, но при этом не удается, поэтому никогда не попадает в часть удаления.Поэтому я не уверен, что удаление папки на самом деле более эффективно, чем удаление ее содержимого.

Любые мысли приветствуются.Я обычно работаю на Java или Python, но я гибкий.Я думаю, что это проблема протокола, а не проблема библиотеки.

Ответы [ 2 ]

2 голосов
/ 30 июля 2012

Предполагая, что вы не используете нетипичный сервер (например, gmail, который довольно нетипичен), вы можете выполнить эти команды после LOGIN и SELECT [folder]:

A001 STORE 1:N +FLAGS (\Deleted)
A002 EXPUNGE
A003 STORE 1:N +FLAGS (\Deleted)
A004 EXPUNGE

И так далее, где вы заменяете N размером вашей партии. При этом не будет использоваться папка «Корзина» (если только у вашего сервера IMAP нет специальной логики, например Gmail: для gmail, настройте параметры доступа к IMAP).

Вы должны быть в состоянии сделать это:

A001 STORE 1:* +FLAGS (\Deleted)
A002 EXPUNGE

Хотя это может занять некоторое время.

Фактически, вы можете использовать такой инструмент, как socat , чтобы самостоятельно войти в систему и говорить по протоколу:

socat READLINE: OPENSSL:[server]:993,noverify,crlf
a LOGIN [user] "[password]"
b SELECT [folder]

А затем команды сохранения и удаления сверху.

0 голосов
/ 28 марта 2012

Спецификация IMAP предоставляет команду DELETE , которая может уничтожить весь почтовый ящик.

...