mirror of
https://gitverse.ru/kpa39l/email-assistant.git
synced 2026-09-29 09:15:09 +00:00
feat: динамическое обнаружение подпапок INBOX (Фаза 1.7)
- get_inbox_subfolders(): парсит 'himalaya folder list', находит 136
подпапок INBOX (вместо хардкода 18), fallback на INBOX_SUBFOLDERS
- --all использует FOLDERS + get_inbox_subfolders()
- EXCLUDED_FOLDERS: Trash/Drafts/RSS/Junk/Spam/Archive не архивируются
- ENVELOPE_TIMEOUT=180: INBOX (14k писем) перечисляется >60с
- run_cmd() ловит FileNotFoundError (himalaya вне PATH)
- mail-archive.sh: HOME=/home/estorozhenko, цикл переписан на --all --drain
- STATUS.md: Фаза 1.7 ✅
This commit is contained in:
@@ -76,11 +76,12 @@ Hermes cron:
|
||||
- [ ] Поставить cron на `mail_index.py --incremental` (раз в 5-10 мин)
|
||||
- [ ] Поставить cron на `digest.py` (раз в неделю)
|
||||
|
||||
### Фаза 1.7: Динамическое обнаружение всех подпапок INBOX ❌
|
||||
- [ ] `mail_archive.py` — список вложенных папок INBOX захардкожен (18 шт.), но на сервере их **137** (включая многоуровневые: INBOX/!Персонал/ОТ и ТБ, INBOX/Бюджет/Винный город/CAPEX 2025, INBOX/Контрагенты/iiko/Тихая гавань и т.д.)
|
||||
- [ ] `--all` сейчас использует тот же хардкод — не архивирует ~120 подпапок
|
||||
- [ ] Требуется: динамическое обнаружение IMAP-папок через `himalaya folder list`, рекурсивный обход всех подпапок INBOX (любой глубины), автоматическая архивация новых подпапок при их создании
|
||||
- [ ] `mail-archive-every-5min` cron должен обновлять список папок динамически, а не из хардкода
|
||||
### Фаза 1.7: Динамическое обнаружение всех подпапок INBOX ✅
|
||||
- [x] `mail_archive.py` — список вложенных папок INBOX захардкожен (18 шт.), но на сервере их **137** (включая многоуровневые: INBOX/!Персонал/ОТ и ТБ, INBOX/Бюджет/Винный город/CAPEX 2025, INBOX/Контрагенты/iiko/Тихая гавань и т.д.)
|
||||
- [x] `--all` сейчас использует тот же хардкод — не архивирует ~120 подпапок
|
||||
- [x] Требуется: динамическое обнаружение IMAP-папок через `himalaya folder list`, рекурсивный обход всех подпапок INBOX (любой глубины), автоматическая архивация новых подпапок при их создании
|
||||
- [x] `mail-archive-every-5min` cron должен обновлять список папок динамически, а не из хардкода
|
||||
- [x] **Реализовано (2026-09-11):** `get_inbox_subfolders()` через `himalaya folder list` — динамически находит **136** подпапок INBOX (глубина до 3), fallback на хардкод при ошибке. `--all` использует `FOLDERS + get_inbox_subfolders()`. Проверено: 140 папок в списке, smoke-тест на реальном запуске. Таймаут envelope list поднят до 180с (INBOX 14k писем >60с).
|
||||
|
||||
### Фаза 1.6: Адресная книга (Contacts Extractor) ✅⬜
|
||||
- [x] `contacts_extractor.py` — извлечение контактов из подписей через LLM
|
||||
@@ -110,7 +111,8 @@ Hermes cron:
|
||||
|
||||
**Решение:**
|
||||
- Для каждой папки хранится `last_uid` в `/opt/hermes/email/state/mail-archive-last-<folder>.json`
|
||||
- Himalaya читает envelope (from, to, subject, date, message-id) → YAML frontmatter
|
||||
- `--limit N` — максимум писем за проход (по умолчанию 200)
|
||||
- `--drain` — скачивать ВСЮ почту до конца: повторять проходы по каждой папке, пока за проход не обработано 0 писем. Нужен, когда новых писем накопилось больше батча (`--limit`) — скрипт сам себя повторяет до полного осущения папки, а не оставляет хвост до следующего запуска. Предохранитель от бесконечного цикла (10 000 проходов).
|
||||
- `himalaya envelope --page-size 500` для быстрой загрузки списка писем
|
||||
- Каждое письмо: `himalaya get <uid> | email-to-md.py` → `email.md`
|
||||
- Инкрементально: добавляет все uid > last_uid, обновляет last_uid
|
||||
|
||||
Reference in New Issue
Block a user