Files
janssen/claude-memory/project_mailstore.md
T
2026-06-11 21:49:04 +02:00

4.6 KiB

name, description, metadata
name description metadata
project-mailstore MailStore Server na 192.168.1.53 — archiv emailů, Management API, IMAP přístup, Claws Mail klient
node_type type originSessionId
memory project 49cbd8a2-c71e-49be-8c52-59dfa5ac7680

MailStore Server v26.2.1.24065 na 192.168.1.53 (hostname MAILSTORE, Win). Archiv ~2,3 mil emailů, data na Z:\MailArchive. Největší schránka vladimir.buzalka@buzalka.cz: 1 077 799 zpráv / 273 GB.

Přístupy:

  • Windows admin (WinRM): administrator / Vlado7309208104++. WinRM remoting funguje z U:/janssen PC (TrustedHosts nastaveno).
  • MailStore admin: admin / *$N(B)vMUym!%

Management API (HTTPS, port 8463): zapnuté v configu MailStoreServer.json (API via HTTPS Configuration.Enabled=true). Volá se POST https://192.168.1.53:8463/api/invoke/<Funkce>, Basic Auth, parametry jako form body (application/x-www-form-urlencoded), ne JSON. Self-signed cert → -SkipCertificateCheck. Async operace vrátí token+statusCode=running, výsledek se poluje přes POST /api/get-status (params token, lastKnownStatusVersion, millisecondsTimeout); result je v poslední odpovědi po succeeded. ~90 funkcí (GetUsers, GetStores, GetMessages, GetChildFolders, GetFolderStatistics, RunProfile, CreateBackup…). Dokumentace: help.mailstore.com/en/server/Administration_API_-_Function_Reference. GetMessages chce přesnou cestu složky (např. vladimir.buzalka@buzalka.cz/Exchange vladimir.buzalka/Sent Items).

IMAP (port 143, STARTTLS): zapnuté v configu (IMAP Server Configuration.Enabled=true). Po STARTTLS server nabízí jen AUTH=PLAIN, ale prostý IMAP LOGIN command funguje (Python imaplib.login OK, curl --ssl-reqd OK). Jako admin vidět všechny archivy. Lze stáhnout raw EML konkrétní zprávy.

Claves Mail (Windows) klient: Metoda autentizace MUSÍ být "Prostý text" (= prostý LOGIN command). "PLAIN"/"LOGIN"/"Automaticky" selhávají — Claws/libetpan na Windows je bez SASL pluginů ("PLAIN" → "Bad arguments", "LOGIN" → chybějící SASL plugin). Nastavení: server 192.168.1.53:143, STARTTLS, auth "Prostý text", admin / heslo. Na první zobrazení složek nutno "Obnovit strom složek" → Ano.

Bezpečnost: port 8463 ani 143 NEjsou forwardované na MikroTiku (192.168.1.2), přístup jen z LAN. MikroTik API na 8728 (admin/Vlado9674+).

Nástroje v U:/janssen/mailstore/ (ruční prohlížeč archivu, schránka→složka→zpráva, spouštět .venv\Scripts\python.exe):

  • mailstore_map_v1.0.py <schránka> — strom složek z API GetChildFolders (+--no-stats, --list). Arg = top-level složka (např. vladimir.buzalka@buzalka.cz).
  • mailstore_folder_v1.0.py "<plná cesta složky>" — seznam zpráv (datum|od|předmět) přes dávkový IMAP FETCH hlaviček (+--limit N, --all, --oldest).
  • mailstore_read_v1.0.py "<složka>" <číslo> — plný obsah jedné zprávy (hlavičky, tělo, přílohy) přes IMAP FETCH RFC822 (+--uid, --save DIR, --raw).

Ingest do Mongo — mailstore_ingest_v1.0.py <schránka> --since ROK [--dry-run] [--folder X] [--limit N]: backfill staré historie z MailStore do Mongo kolekce emaily. Dedup podle internet Message-ID (= _id v Mongu, shoduje se 1:1 s IMAP hlavičkou). Filtr data client-side z DATE headeru (NE IMAP SEARCH). Schéma dokumentu = jako Graph import. --dry-run spočítá kolik chybí bez zápisu. PILOT OVĚŘEN end-to-end 2026-06-11: MailStore IMAP → ingest → Mongo → enrich_fulltext → PG → MCP emaily search našel zprávu z 2020. Header scan ~490 zpráv/s (1M ≈ 30 min). vladimir.buzalka@buzalka.cz: Sent Items má 20k zpráv 2020+ k dobrání (i odeslané chybí z Graphu!). Plán: roztáhnout celou schránku, pak --since hlouběji do minulosti.

Dva gotchas (vyřešené):

  1. Kolekce emaily má unique+sparse index na graph_id. MailStore dokument musí pole graph_id ÚPLNĚ VYNECHAT (ne None) — explicitní null koliduje (sparse ignoruje jen chybějící pole). Jinak E11000 duplicate key.
  2. Mongo {'graph_id': None} matchuje i dokumenty BEZ pole — delete_many tím smete i validní dokumenty. Pozor při úklidu.
  3. enrich_fulltext spouštět přes U:/janssen/.venv/Scripts/python.exe (system Python C:\Python312 nemá psycopg).

IMAP SEARCH je slepá ulička (78s, vrací jen ~10 výsledků). API GetMessages dává jen metadata (id, date, uid1=Message-ID, outgoing), ne obsah — obsah jen přes IMAP. API id (1:947923) ≠ IMAP UID, most je Message-ID (=uid1).

Pracovní adresář: U:/janssen/mailstore/. Pozn.: feedback-admin-powershell — admin příkazy (winget) rovnou psát uživateli.