Files
janssen/EmailsImport/Trash/jnj_mailbox_sync_v1.0.md
T
2026-06-10 20:16:38 +02:00

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). EntryID jen 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.