A Python port of the Invisible Internet Project (I2P)
at main 49 lines 1.3 kB view raw
1"""Email message model and parsing. 2 3Parses RFC 822 email messages for display in the web UI. 4 5Ported from i2p.susi.webmail.Mail. 6""" 7 8from __future__ import annotations 9 10from dataclasses import dataclass, field 11from datetime import datetime 12 13 14@dataclass 15class MailMessage: 16 """An email message.""" 17 sender: str 18 recipient: str 19 subject: str 20 body: str 21 date: str = "" 22 message_id: str = "" 23 read: bool = False 24 25 26def parse_email(raw: str) -> MailMessage: 27 """Parse a raw RFC 822 email string into a MailMessage.""" 28 headers: dict[str, str] = {} 29 lines = raw.split("\r\n") if "\r\n" in raw else raw.split("\n") 30 31 body_start = 0 32 for i, line in enumerate(lines): 33 if line.strip() == "": 34 body_start = i + 1 35 break 36 if ":" in line: 37 key, value = line.split(":", 1) 38 headers[key.strip().lower()] = value.strip() 39 40 body = "\r\n".join(lines[body_start:]) if "\r\n" in raw else "\n".join(lines[body_start:]) 41 42 return MailMessage( 43 sender=headers.get("from", ""), 44 recipient=headers.get("to", ""), 45 subject=headers.get("subject", ""), 46 body=body, 47 date=headers.get("date", ""), 48 message_id=headers.get("message-id", ""), 49 )