# Tasks: не помечать письма прочитанными при архивации ## Задачи - [x] 1. `mail_archive.py`, `get_email_content()`: добавлен `--preview` в вызов `himalaya message read` — флаг НЕ выставляет `\Seen`. Проверено: himalaya `message read --preview` (не ставит Seen). - [x] 2. `mail_archive.py`, `get_attachments()`: `himalaya attachment download` НЕ имеет флага против Seen. Вместо него — новый путь: `fetch_attachments_imaplib()` — сырой IMAP (socket+ssl, stdlib) c `UID FETCH ... (BODY.PEEK[])` — не выставляет `\Seen`. Используется с фолбэком на himalaya + `flag remove seen` (страховка). - [x] 3. `_imap_utf7_encode()` — конвертация имени папки в IMAP modified UTF-7 (кириллица в имени папки на Exchange иначе не находится). - [x] 4. Парсинг литерала `{N}` в ответе UID FETCH: чтение чанками по 64 КБ, ожидание полного литерала (письма до ~1.5 МБ). - [x] 5. MIME-encoded word в `get_filename()`: декодирование через `email.header.decode_header` (например `=?koi8-r?B?...?=`). - [x] 6. Живая проверка на реальном письме (UID 14200, INBOX, непрочитанное, вложение «Переместить стол.docx» 1.1 МБ): флаги до `''` = после `''` — `\Seen` НЕ выставлен, файл скачан. ## Верификация (живой тест) - Письмо: UID 14200, папка INBOX, флаги до: `()` (непрочитанное). - `fetch_attachments_imaplib("14200", "INBOX", dest)` → True, 1 вложение: «Переместить стол.docx» (1 117 244 байт). - Флаги после: `()` — без `\Seen`. - Ранее: UID 320 (непрочитанное, без вложений): BODY.PEEK[] не меняет флаги. - Письмо 52 (INBOX/Организация работы, кириллица в имени папки): 4 docx-вложения скачаны через mUTF-7-папку, флаги не тронуты.