Extract shared mail routing and IMAP folder helpers

Prompt since previous commit: execute step 1

Centralized route targets, source-folder policy, and modified UTF-7 mailbox quoting. Verification: py_compile, route/folder consistency, and git diff --check passed.
This commit is contained in:
2026-07-04 12:23:14 +02:00
parent 537c87e472
commit eb53bc123a
8 changed files with 329 additions and 522 deletions
+4 -14
View File
@@ -26,6 +26,7 @@ from pathlib import Path
from collections import defaultdict
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from imap_utils import list_folders, quote_mailbox
# Mappen die NIET in het overzicht komen (systeem + inbox zelf)
UITSLUITINGEN = {
@@ -86,14 +87,6 @@ def leesbare_map(imap_naam: str) -> str:
return imap_naam.removeprefix("INBOX.").replace(".", " ")
def parse_folder_name(raw: bytes) -> str | None:
decoded = raw.decode("utf-8", errors="replace")
m = re.match(r'\(.*?\)\s+".*?"\s+(.*)', decoded)
if m:
return m.group(1).strip().strip('"')
return None
# ── IMAP ophalen ──────────────────────────────────────────────────────────────
def haal_berichten_op(mail: imaplib.IMAP4_SSL, zoekdatum: date) -> dict[str, list[dict]]:
@@ -104,13 +97,10 @@ def haal_berichten_op(mail: imaplib.IMAP4_SSL, zoekdatum: date) -> dict[str, lis
since = imap_date(zoekdatum)
before = imap_date(zoekdatum + timedelta(days=1))
status, raw_folders = mail.list()
if status != "OK":
alle_mappen = list_folders(mail)
if not alle_mappen:
return {}
alle_mappen = [parse_folder_name(f) for f in raw_folders if f]
alle_mappen = [f for f in alle_mappen if f]
resultaat: dict[str, list[dict]] = defaultdict(list)
for folder in sorted(alle_mappen):
@@ -119,7 +109,7 @@ def haal_berichten_op(mail: imaplib.IMAP4_SSL, zoekdatum: date) -> dict[str, lis
if UITSLUIT_PATRONEN.match(folder):
continue
status, data = mail.select(f'"{folder}"', readonly=True)
status, data = mail.select(quote_mailbox(folder), readonly=True)
if status != "OK":
continue