3.1 KiB
jnj_mailbox_sync v1.0.0
Soubor: jnj_mailbox_sync_v1.0.py · Datum: 2026-06-09 · Autor: vladimir.buzalka
Následník: inbox_full_sync_v1.1.py (po validaci přesunout do Trash/)
Účel
Synchronizace JNJ Outlooku (MAPI) → osobní schránka + bookkeeping v SQLite
(C:\Users\vbuzalka\SQLITE\jnjemails.db). Oproti inbox_full_sync navíc sleduje
přesuny e-mailů mezi složkami a příznak „už není ve schránce" bez opětovného
přenosu těla.
- Scope: primární schránka, Inbox + Sent Items včetně všech podsložek.
- Online Archive se NESkenuje — firemní pravidla tam přesouvají nejstarší
e-maily (ty už máme dávno stažené). Když e-mail ze skenované schránky zmizí,
ponechá se poslední známá cesta a nastaví se
not_in_mailbox_anymore=1. - Identita = Internet Message-ID (stabilní přes přesuny).
EntryIDjen pomocný.
Sloupce cest (SQLite messages)
| sloupec | význam |
|---|---|
folder |
cesta při prvním zachycení (historie, nepřepisuje se) |
jnj_folder |
aktuální živá cesta (přepisuje se při přesunu) |
not_in_mailbox_anymore |
1 = e-mail už ve skenované schránce není |
left_mailbox_at |
kdy detekováno, že opustil schránku |
updated_at |
bump při insertu i každé změně → watermark pro domácí sync |
Režimy
--mode |
co dělá | upload .msg | okno --days |
|---|---|---|---|
capture (default) |
jako inbox_full_sync: nové e-maily uloží+nahraje | ano (nové) | ignoruje (vše) |
update-paths |
jen metadata: aktualizuje cesty/přečteno, označí „GONE" | ne | ano |
full-update |
update-paths + dorovná chybějící těla |
ano (chybějící) | ano |
Detekce „opustilo schránku" běží jen v update-paths/full-update s platným
oknem (jinak by neskenováním archivu dělala falešné poplachy).
Argumenty
--mode {capture,update-paths,full-update} default capture
--days N okno ve dnech (default 30); 0 = celý Inbox+Sent
--dry-run NIC nezapíše/nenahraje, jen vypíše co by udělal + souhrn
--limit N max N položek (rychlý test; vypne detekci GONE)
--no-db-upload na konci nenahrávat SQLite na server
Spuštění
# 1) Přečíst, co by full-update přinesl (NIC nezmění):
python jnj_mailbox_sync_v1.0.py --mode full-update --days 30 --dry-run
# 2) Naostro:
python jnj_mailbox_sync_v1.0.py --mode full-update --days 30
Výstup
Per-položka: NEW (nahráno) / NEW* (dry-run by nahrál) / UPD (změna cesty/
přečteno) / GONE (opustilo schránku) / skip. Na konci souhrn: nalezeno, nově
zachyceno, aktualizovaná cesta, změna přečtení, vráceno, opustilo schránku, chyby.
Závislosti
pywin32, requests, cryptography, sqlite3 (stdlib). Python 3.10+, Windows,
spuštěný a přihlášený Outlook.
Navazuje (zatím NEhotovo — domácí strana)
sync_jnj_state (python-runner u Monga): zrcadlo SQLite → Mongo jnj_messages
(watermark přes updated_at) + doplnění jnj_folder/příznaků do kolekce
emaily."vbuzalka@its.jnj.com". Viz plán implementace.