"""Email message model and parsing. Parses RFC 822 email messages for display in the web UI. Ported from i2p.susi.webmail.Mail. """ from __future__ import annotations from dataclasses import dataclass, field from datetime import datetime @dataclass class MailMessage: """An email message.""" sender: str recipient: str subject: str body: str date: str = "" message_id: str = "" read: bool = False def parse_email(raw: str) -> MailMessage: """Parse a raw RFC 822 email string into a MailMessage.""" headers: dict[str, str] = {} lines = raw.split("\r\n") if "\r\n" in raw else raw.split("\n") body_start = 0 for i, line in enumerate(lines): if line.strip() == "": body_start = i + 1 break if ":" in line: key, value = line.split(":", 1) headers[key.strip().lower()] = value.strip() body = "\r\n".join(lines[body_start:]) if "\r\n" in raw else "\n".join(lines[body_start:]) return MailMessage( sender=headers.get("from", ""), recipient=headers.get("to", ""), subject=headers.get("subject", ""), body=body, date=headers.get("date", ""), message_id=headers.get("message-id", ""), )