Files

2.9 KiB

email-attachments Specification

Purpose

Скачивание вложений письма в каталог этого письма. Сейчас mail_archive.py вызывает himalaya attachment download --dir, но правильный флаг в Himalaya — --downloads-dir, из-за чего команда падает (exit 2), ошибка молча глотается except: pass, и папка attachments/ всегда пустая. Вложения теряются.

Requirements

Requirement: Вложения сохраняются в каталог письма

Для каждого письма с вложениями (флаг has_attachment: true в frontmatter) вложения MUST быть сохранены в подкаталог attachments/ каталога письма (/opt/hermes/email/<folder>/YYYY/MM/<uid>/attachments/).

Scenario: Письмо с вложением архивировано

  • WHEN mail_archive.py заархивировал письмо с has_attachment: true
  • THEN файлы вложений лежат в <msg_dir>/attachments/ и совпадают с вложениями на IMAP-сервере

Requirement: Правильный флаг Himalaya

Скачивание вложений MUST использовать флаг --downloads-dir (а не несуществующий --dir) команды himalaya attachment download, и передавать ему каталог письма.

Scenario: Вызов himalaya с корректным флагом

  • WHEN get_attachments() выполняется для письма
  • THEN используется himalaya attachment download --folder <folder> --downloads-dir <msg_dir>/attachments <uid>, 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 вложения не скачиваются повторно (идемпотентность)