## Purpose Скачивание вложений письма в каталог этого письма. Сейчас `mail_archive.py` вызывает `himalaya attachment download --dir`, но правильный флаг в Himalaya — `--downloads-dir`, из-за чего команда падает (exit 2), ошибка молча глотается `except: pass`, и папка `attachments/` всегда пустая. Вложения теряются. ## ADDED Requirements ### Requirement: Вложения сохраняются в каталог письма Для каждого письма с вложениями (флаг `has_attachment: true` в frontmatter) вложения MUST быть сохранены в подкаталог `attachments/` каталога письма (`/opt/hermes/email//YYYY/MM//attachments/`). #### Scenario: Письмо с вложением архивировано - **WHEN** `mail_archive.py` заархивировал письмо с `has_attachment: true` - **THEN** файлы вложений лежат в `/attachments/` и совпадают с вложениями на IMAP-сервере ### Requirement: Правильный флаг Himalaya Скачивание вложений MUST использовать флаг `--downloads-dir` (а не несуществующий `--dir`) команды `himalaya attachment download`, и передавать ему каталог письма. #### Scenario: Вызов himalaya с корректным флагом - **WHEN** `get_attachments()` выполняется для письма - **THEN** используется `himalaya attachment download --folder --downloads-dir /attachments `, exit code 0 при успехе ### Requirement: Учёт отсутствия вложений Если письмо не имеет вложений (`has_attachment: false` или команда вернула «нет вложений»), скрипт MUST NOT создавать пустую папку `attachments/` и MUST NOT считать это ошибкой. #### Scenario: Письмо без вложений - **WHEN** `mail_archive.py` обрабатывает письмо без вложений - **THEN** каталог `attachments/` не создаётся, ошибка не логируется ### Requirement: Повторная обработка существующих писем Повторный запуск `mail_archive.py` MUST NOT повторно качать уже сохранённые вложения (проверка по наличию каталога/файлов). #### Scenario: Повторный запуск - **WHEN** `mail_archive.py` запущен повторно на письме с уже скачанными вложениями - **THEN** вложения не скачиваются повторно (идемпотентность)