# jnj_scan_failed_sent_v1.0.py **Verze:** 1.0 · **Datum:** 2026-06-16 JNJ-native (pywin32 / MAPI). Projde **Sent Items za posledních N dní** (default 60), najde **podezřelé = pravděpodobně neodeslané** e-maily, uloží je jako `.msg` a vypíše, které příznaky se trefily. **Nic neodesílá ani nemaže.** ## Příznaky (čteno ze ŽIVÉ položky) - **FAIL_BODY** (silný) — tělo / ReportText obsahuje „could not be sent", „SendAsDenied", „permission to send the message on behalf", „TransportSend operation has failed", „MapiExceptionSendAsDenied". - **SENDAS_BUZ** (silný) — `PrimarySendAccount` (0x0E28) / SentRepresenting (0x0065) / Sender (0x0C1F) obsahuje `buzalka.cz` → posíláno přes špatnou identitu. - **NO_MSGID** (slabý) — chybí Internet Message-ID (0x1035); může být i provizorní kopie, co se později dokončí. `STRONG_*` soubory = silný příznak (skoro jistě neodesláno). `weak_*` soubory = jen NO_MSGID. ## Spuštění (JNJ stroj s Outlookem) ``` pip install pywin32 python jnj_scan_failed_sent_v1.0.py ``` ## Konfigurace - `DAYS` = okno (default 60). - `OUTPUT_DIR` = kam ukládat `.msg` (default `C:\Users\vbuzalka\sent_suspects`). - `INCLUDE_NO_MSGID` = ukládat i jen-NO_MSGID položky (default True; dej False, když chceš jen tvrdé FAIL/SENDAS). - `SENDER_SMTP` = účet, jehož Sent Items se skenuje. ## Postup 1. Spusť na JNJ → ve výpisu uvidíš podezřelé + uložené `.msg`. 2. Přines `.msg` z `OUTPUT_DIR` domů → olefilem je projdeme a potvrdíme, které opravdu neodešly (a komu je třeba poslat znovu se správným From). ## Pozn. - Okno 60 dní = výkon (řazeno SentOn desc, starší se přeskočí brzy). - Detekce funguje nad **živou** položkou (čerstvý SaveAs) — proto se pouští přímo na JNJ, ne nad starými batch kopiemi. - Hlavní příčina selhání: From = `vladimir.buzalka@buzalka.cz` na účtu `vbuzalka@its.jnj.com` bez SendAs → Exchange odmítne. Viz paměť project_jnj_unsent_detection.