Причина: himalaya message read и attachment download используют IMAP BODY[], который по RFC 3501 выставляет \Seen на сервере (Microsoft Exchange). Пользователь: письма в ящике после скачивания становятся прочитанными. Фикс: - чтение тела: himalaya message read --preview (не ставит Seen) - вложения: fetch_attachments_imaplib() — сырой IMAP stdlib (socket+ssl), UID FETCH (BODY.PEEK[]), папки в modified UTF-7, литералы до 1.5МБ, MIME-encoded words, фолбэк himalaya + flag remove seen Проверено живьём: UID 14200 (INBOX, docx 1.1МБ) флаги ()->() — Seen не выставлен. Openspec: change no-mark-seen-on-archive заархивирован (2026-09-14-no-mark-seen-on-archive), 7/7 validate OK
3.6 KiB
Proposal: Не помечать письма прочитанными при архивации
Problem
mail_archive.py читает каждое письмо через himalaya message read и
himalaya attachment download. Обе команды himalaya по умолчанию запрашивают
тело письма через IMAP BODY[], из-за чего почтовый сервер автоматически
выставляет флаг \Seen — письмо в почтовом ящике становится прочитанным.
Подтверждение на живых данных (2026-09-14):
INBOX/!Персонал/2026/09/73/email.md flags: ["Seen", "Answered"]
INBOX/!Персонал/2026/09/70/email.md flags: ["Seen"]
Свежие входящие письма (сентябрь 2026) пришли непрочитанными, но после
автоматической архивации (cron каждые 5 мин) получили флаг Seen.
Статистика по всему архиву: 4223 письма с Seen против 973 без флагов.
Это нарушает пользовательское ожидание: вложение/тело скачивается автоматически, но «руками» в ящике письмо никто не читал, и оно должно оставаться непрочитанным.
Expected behavior
- Архивация (включая скачивание вложений) НЕ выставляет флаг
\Seen. - Скачивание вложений НЕ выставляет флаг
\Seen. - Классификация/обработчики НЕ выставляют флаг
\Seen. - Ручные команды чтения (
himalaya message readбез флагов) продолжают работать как раньше (это личное действие пользователя).
Accepted solution
himalaya message read→ добавить флаг--preview(документировано: «Read the message without applying the "seen" flag to its corresponding envelope»).himalaya attachment download→ у команды НЕТ флага--preview. Обход: перед скачиванием вложений выполнять только операции, не ставящие Seen; самattachment downloadзаменить на извлечение вложений из уже скачанного полного письма (himalaya message export --full+ распаковка MIME в stdlib Python) ЛИБО временно (до починки himalaya) — выставлять Seen обратно черезhimalaya flag removeсразу после скачивания.
Выбор между двумя вариантами для вложений — в design.md (будет решён по
результатам проверки, ставит ли message export Seen).
Out of scope
- Изменение поведения
himalaya message readдля интерактивного пользователя. - Исправление бага himalaya (это upstream issue).
Rollback
- Патч минимален:
--previewв одном месте + option для вложений. - Откат: удалить строку
--preview(или вернуть способ скачивания вложений). - Флаги уже помеченных писем этим патчем не возвращаются (отдельная задача, вне scope).