Регистрация...

Eserv Forum / E4 / Mail / IMAP - не удаляет почту!

wikipost // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
Добрый день! Вот такая штуковина — перестала открываться учётка для unclassified-почты, полез смотреть — а там почти девять тысяч писем в clear и ещё больше — в spam. При этом, алгоритм работы у меня такой — каждое утро просмотрел, что там есть неклассифицированного, раскидал ручками, потом папки почистил, прямо из клиента (Thunderbrd, 3.1.4). В настройках, для этой учётки, стояло "При удалении сообщения — удалить его сразу", однако, вот казус, нифига не удаляется таким образом.
Потёр всё руками, вкупе с db3-файлами баз — ИМХО, если у меня в ящике пусто, 100-мегабайтная база абсолютно ни к чему.
Сейчас вот проверяю, действительно, не удаляет сами .eml файлы физически, хотя клиент их уже не показывает.

В общем, у меня два вопроса:

  1. С чем может быть связано неудаление почты? Для unclassified я могу настроить epurger, но вот для учёток пользователей такое поведение может быть очень нехорошим: чистить за них я не буду, чтобы не потереть лишнее (допустим, сотрудник в отпуске, а я скриптом потёр его spam, в котором было что-то очень важное), а если у них там будет копиться почта — это может быть чревато "зависанием" клиента, как у меня сегодня.
  2. Что всё-таки делать с db3-файлами баз? Подумайте над этим, пожалуйста: лично мне кажется, что нужно ввести какое-то средство для их очистки. Если это будет занимать время — сделать оптимизацию по расписанию, подавляющее большинство серверов можно совершенно спокойно загружать такими задачами на ночь.
 
Комментарии к этой версии (20.09.2010 14:34) [~shajtan] caaff8b7
АвторДатаТекстtags
ac20.09.2010 17:29
В IMAP нет команды удаления писем, есть только "очистка ящика" (expunge). Соответственно и в Thunderbird'е этот процесс разбит на две стадии. Первая — либо перемещение письма в Удаленные и пометка "к удалению" в исходном ящике. Либо просто пометка "к удалению" (при этом удаленные сообщения показываются зачеркнутыми). Либо "удалить сразу" (на самом деле это то же самое, что и предыдущий пункт, только пользователю НЕ показываются помеченные к удалению сообщения, но в ящике они остаются). Т.е. ни одна из операций удаления не приводит (и не должна приводить) к удалению писем на сервере. Удаление производится только по команде "Сжать" в контекстном меню папки. При этом Thunderbird запускает на сервере imap-команду EXPUNGE, по которой Eserv запускает sql-команду DELETE по индексу ящика в базе db3. Файл базы при этом не уменьшается в размере, но sqlite "освобождает место" внутри файла, добавляя удаленные блоки в список свободных — последующие добавления в базу будут записываться туда, без увеличения файла базы. Если у вас db3 непрерывно растёт — значит вы не запускаете Сжать/expunge. Против такого поведения пользователя (не вникающего в особенности IMAP и доводящего свои ящики до неподъемных размеров) есть только один приём — квоты. Мы их тут в соседних темах обсуждали, и добавить мне по этой теме нечего кроме очередной бета-версии консоли управления, где этими квотами можно управлять.

shajtan пишет: 100-мегабайтная база абсолютно ни к чему.

100-мегабайтный db3? Сколько писем в нем на самом деле? У меня в ящике spam сейчас 28610 писем, а соответствующий messages.db3 при этом 10 Мб.
wikipost
shajtan21.09.2010 10:31
Понял. Тогда вот вопрос — у меня больше сотни пользователей, объяснять всем, что нужно проводить сжатие папки IMAP — долго и муторно. Если всё удаление производится на сервере, путём команды EXPUNGE — то почему-бы не добавить в EServ возможность автоматического выполнения этой команды? Добавляем задание по расписанию, и сжимаем, скажем, каждую ночь. В принципе, было-бы очень ввести такой параметр — "сжимать базу" — для каждого пользователя, по аналогии с "доставлять спам в Inbox".

Сколько было в db3 — сейчас уже не знаю, потёр. В ящике было порядка 8600 eml-файлов.
wikipost
ac21.09.2010 13:26
Да сделать-то это (удаление помеченных при отключении от ящика), конечно, не проблема — одно слово дописать в программу (в POP3, кстати, так и реализовано). Но это будет нарушение стандарта IMAP, т.е. для кого-то будет "сюрприз". Вот в веб-почте, для которой стандартов нет, мы удаляем удалённое сразу.
wikipost
shajtan21.09.2010 17:06
Мдя... стандарты трогать не стоит, они на то и стандарты. Хорошо, а каким-либо внешним "костылём" можно тут обойтись? Не внося изменений в код EServa, толкать какой-либо сторонний плагин, чтобы всё-таки удалять то, что помечено для удаления?
wikipost
tbmos21.09.2010 19:53
ред: 21.09.2010 20:19
Outlook Express не лучше себя ведет,при таком кол-ве сообщений "было порядка 8600" , для того чтобы пометить на удаление,устанишь отвечать на вопросы подождать или остановить,да и в Thunderbird'е(версия 3.1.4) не лучше все очень долго долго,вообщем на практике,к большому сожелению, если сообщений очень много, проще все остановить и убить всю почтовую папку этого ящика,чем пытаться убить хотя бы пару сообщений по imap в нем или оставлять как есть.
wikipost
ac21.09.2010 22:55
Тоже зависит от того, сжимаете ли папку, и как удаляются сообщения — переносятся в другую папку "Удалённые" (в Outlook и Thunderbird по умолчанию так) или просто помечаются.
wikipost
ac22.09.2010 00:49
К слову о больших ящиках и IMAP-квотах в E4,
eserv4 imap over quota
wikipost
shajtan22.09.2010 15:13
Кхм... не удаляет. Сейчас в папке clear лежало 31 сообщение. Удалил их в Thunderberd (стоит "удалять сразу"), потом там-же сделал "сжатие папки". Все файлы остались на своём месте, в Thunderberd папка выглядит пустой.
Лог от IMAP:
2010-09-22 16:08:20;172.16.11.7;unclassified@loniir.ru;IN;3265;3956;clear;30 expunge 2010-09-22 16:08:20;172.16.11.7;unclassified@loniir.ru;OUT;3265;3956;clear;* 0 EXISTS 2010-09-22 16:08:20;172.16.11.7;unclassified@loniir.ru;OUT;3265;3956;clear;30 OK EXPUNGE completed 2010-09-22 16:08:20;172.16.11.7;unclassified@loniir.ru;IN;3265;3956;clear;31 getquotaroot "clear" 2010-09-22 16:08:20;172.16.11.7;unclassified@loniir.ru;OUT;3265;3956;clear;* QUOTAROOT "clear" eserv * QUOTA eserv (STORAGE 0 1000000) 31 OK Getquota completed 2010-09-22 16:08:20;172.16.11.7;unclassified@loniir.ru;IN;3265;3956;clear;32 IDLE 2010-09-22 16:08:20;172.16.11.7;unclassified@loniir.ru;OUT;3265;3956;clear;+ idling (unclassified@loniir.ru/clear)

Судя по нему — команду принял, что-то там выполнил... но ведь файлы-то остались!
wikipost
ac22.09.2010 15:51
Файлы остались — где именно? (не про это ли 8я заметка на странице http://code.eserv.ru/21.09.2010 ?)
wikipost
shajtan22.09.2010 17:03
\e4\DATA\domains\loniir.ru\unclassified\clear

Именно что каталог пользователя, именно что были вручную перенесены туда.
wikipost
ac22.09.2010 17:31
Тогда надо проверить, что операция (по приведённому логу) выполнялось именно acIMAP'ом из указанного обновления. Возможно что-то там у меня недоисправлено или наоборот испорчено... Тогда исправим.
wikipost
shajtan24.09.2010 10:02
Судя по всему, именно эта версия. По крайней мере, последняя версия acIMAP ко мне пришла 22 числа.
wikipost
Работает на Eserv/5.05555 (05.06.2016)