2012-03-27 2 views
1

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

Легкие детали:

  • Учитывая IMAP сервера, Логин и видовое название папки
  • Nuke все сообщения в этой папке (? Или Nuke папку, если это проще и эффективнее)

атипичных части:

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

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

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

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

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

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

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

ответ

2

Предполагая, что вы не используете нетипичное сервер (как Gmail, которая является весьма нетипичным), вы можете сделать эти команды, после входа в систему, и выберите [папку]:

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

IMAP specification содержит DELETE command, который может уничтожить весь почтовый ящик.

+0

Спасибо, @sarnold хорошая информация, НО Я не уверен, что это исправляет. Скажем, «junk_folder» имеет в нем 100 000 сообщений, и я использую команду DELETE. Я подозреваю, что это будет проблематично для многих реализаций. Из того, что я видел, я думаю, что IMAP-сервер запустит 100 000 команд копирования в Trash и установит удаленный флаг на 100 000 сообщений, так что теперь у вас будет 200 000 сообщений и будет больше избыточной квоты на некоторое время. Только тогда, когда все это будет сделано, он сделает удаление и вернет пространство и, скорее всего, задохнется. Мысли ?? (Зависит от реализации курса) –

+0

Если ваша реализация не была нарушена, DELETE [папка] не должна приводить к перемещению всех сообщений в корзину. Папки «Trash» не являются частью спецификации, и в основном это просто джентльменский контракт от клиентов. Google является исключением: они выполняют много работы в фоновом режиме, но вы можете сразу изменить настройки для удаления. – Max

+0

@Max: Спасибо за дополнительную информацию. – sarnold

Смежные вопросы