# -*- coding: utf-8 -*- import httpx, os from dotenv import load_dotenv from imap_tools import MailBox, AND load_dotenv() c = httpx.Client( base_url=os.environ["DIRECTUS_URL"].rstrip("/"), headers={"Authorization": "Bearer " + os.environ["DIRECTUS_TOKEN"]}, ) total = 0 for col in ["calls", "calls_74951284933"]: resp = c.get(f"/items/{col}", params={"aggregate[count]": "id"}) data = resp.json().get("data", {}) if isinstance(data, list) and data: count = data[0].get("count", 0) elif isinstance(data, dict): count = data.get("count", 0) else: count = 0 total += count print(f"{col}: {count}") print(f"Total in Directus: {total}") mb = MailBox(os.environ["IMAP_SERVER"], 993) mb.login( os.environ["IMAP_USER"], os.environ["IMAP_PASSWORD"], initial_folder=os.environ["IMAP_FOLDER"], ) uids = sorted(int(u) for u in mb.uids()) print(f"Total emails in IMAP: {len(uids)}") call_emails = 0 total_scanned = 0 for start in range(0, len(uids), 500): chunk = uids[start:start + 500] for msg in mb.fetch(AND(uid=f"{chunk[0]}:{chunk[-1]}"), mark_seen=False, bulk=True): total_scanned += 1 subj = (msg.subject or "").lower() if "запись разговора" in subj: call_emails += 1 print(f"Scanned: {total_scanned}") print(f"Call emails in IMAP: {call_emails}") remaining = call_emails - total print(f"Remaining to process: ~{remaining}") mb.logout()