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 -19
View File
@@ -13,23 +13,13 @@ import re
import sys
import getpass
from pathlib import Path
from imap_utils import list_folders, quote_mailbox
IMAP_HOST = "australius.nl"
IMAP_PORT = 993
LOCAL_DIR = Path(__file__).parent / "mailbox"
def parse_folder_name(line: bytes) -> str | None:
"""Haal mapnaam op uit IMAP LIST-response."""
decoded = line.decode("utf-8", errors="replace")
# Formaat: (\Flags) "delimiter" "naam" of (\Flags) "delimiter" naam
match = re.match(r'\(.*?\)\s+".*?"\s+(.*)', decoded)
if not match:
return None
name = match.group(1).strip().strip('"')
return name if name else None
def safe_path(name: str) -> str:
"""Zet mapnaam om naar een veilige directorynaam."""
return re.sub(r'[<>:"/\\|?*\x00-\x1f]', "_", name)
@@ -49,15 +39,11 @@ def download():
print("Ingelogd.\n")
# Alle mappen ophalen
status, raw_folders = mail.list()
if status != "OK":
folders = list_folders(mail)
if not folders:
print("Kan mappenlijst niet ophalen.")
sys.exit(1)
folders = [parse_folder_name(f) for f in raw_folders if f]
folders = [f for f in folders if f]
print(f"Gevonden mappen ({len(folders)}):")
for f in folders:
print(f" {f}")
@@ -69,8 +55,7 @@ def download():
for folder_idx, folder in enumerate(folders, 1):
folder_prefix = f"[map {folder_idx}/{num_folders}] {folder}"
quoted = f'"{folder}"'
status, data = mail.select(quoted, readonly=True)
status, data = mail.select(quote_mailbox(folder), readonly=True)
if status != "OK":
print(f"{folder_prefix}: kan niet openen overgeslagen.")
continue