mirror of
https://gitverse.ru/kpa39l/email-assistant.git
synced 2026-09-29 21:25:10 +00:00
39df85b51c
Причина: 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
57 lines
3.6 KiB
Markdown
57 lines
3.6 KiB
Markdown
# 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
|
|
|
|
1. Архивация (включая скачивание вложений) НЕ выставляет флаг `\Seen`.
|
|
2. Скачивание вложений НЕ выставляет флаг `\Seen`.
|
|
3. Классификация/обработчики НЕ выставляют флаг `\Seen`.
|
|
4. Ручные команды чтения (`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). |