47 lines
2.2 KiB
Python
47 lines
2.2 KiB
Python
"""_find_kpc_attachments_v0.py — DOČASNÉ: najde e-maily s .kpc přílohou a vypíše obsah."""
|
|
import sys, base64
|
|
sys.stdout.reconfigure(encoding="utf-8")
|
|
import msal, requests
|
|
|
|
TENANT="7d269944-37a4-43a1-8140-c7517dc426e9"; CID="4b222bfd-78c9-4239-a53f-43006b3ed07f"
|
|
SECRET="Txg8Q~MjhocuopxsJyJBhPmDfMxZ2r5WpTFj1dfk"
|
|
mailbox = sys.argv[1] if len(sys.argv) > 1 else "vladimir.buzalka@buzalka.cz"
|
|
BASE=f"https://graph.microsoft.com/v1.0/users/{mailbox}"
|
|
|
|
app=msal.ConfidentialClientApplication(CID,authority=f"https://login.microsoftonline.com/{TENANT}",client_credential=SECRET)
|
|
tok=app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
|
|
H={"Authorization":f"Bearer {tok['access_token']}"}
|
|
HS=dict(H); HS["ConsistencyLevel"]="eventual"
|
|
|
|
# hledej e-maily zmiňující kpc (subject/body/příloha)
|
|
r=requests.get(f"{BASE}/messages",headers=HS,params={
|
|
"$search":'"kpc"',"$top":50,
|
|
"$select":"id,subject,from,receivedDateTime,hasAttachments"},timeout=40)
|
|
if not r.ok:
|
|
print("search ERR",r.status_code,r.text[:300]); sys.exit(1)
|
|
msgs=[m for m in r.json().get("value",[]) if m.get("hasAttachments")]
|
|
print(f"[{mailbox}] e-mailů (search kpc) s přílohou: {len(msgs)}\n")
|
|
|
|
found=0
|
|
for m in msgs:
|
|
ra=requests.get(f"{BASE}/messages/{m['id']}/attachments",headers=H,
|
|
params={"$select":"id,name,size,contentType"},timeout=30)
|
|
if not ra.ok: continue
|
|
for a in ra.json().get("value",[]):
|
|
if (a.get("name","") or "").lower().endswith(".kpc"):
|
|
found+=1
|
|
frm=m.get("from",{}).get("emailAddress",{}).get("address","")
|
|
print("="*78)
|
|
print(f"e-mail: {m.get('receivedDateTime','')[:10]} | od {frm} | {m.get('subject','')[:60]}")
|
|
print(f"příloha: {a.get('name')} ({a.get('size')} B)")
|
|
full=requests.get(f"{BASE}/messages/{m['id']}/attachments/{a['id']}",headers=H,timeout=30).json()
|
|
cb=full.get("contentBytes")
|
|
if cb:
|
|
raw=base64.b64decode(cb)
|
|
for enc in ("cp1250","utf-8","latin-1"):
|
|
try: txt=raw.decode(enc); break
|
|
except: txt=None
|
|
print("--- OBSAH ---")
|
|
print(txt if txt else repr(raw[:400]))
|
|
print(f"\nCelkem .kpc příloh: {found}")
|