Files
mail-intake/mail_intake/models/message.py

81 lines
1.7 KiB
Python

"""
Message domain models for Mail Intake.
---
## Summary
This module defines the **canonical, provider-agnostic representation**
of an individual email message as used internally by the Mail Intake
ingestion pipeline.
Models in this module are safe to persist and must not contain any
provider-specific fields or semantics.
"""
from dataclasses import dataclass
from datetime import datetime
from typing import Optional, Dict
@dataclass(frozen=True)
class MailIntakeMessage:
"""
Canonical internal representation of a single email message.
Notes:
**Guarantees:**
- This model represents a fully parsed and normalized email message
- It is intentionally provider-agnostic and suitable for persistence, indexing, and downstream processing
**Constraints:**
- No provider-specific identifiers, payloads, or API semantics should appear in this model
"""
message_id: str
"""
Provider-specific message identifier.
"""
thread_id: str
"""
Provider-specific thread identifier to which this message belongs.
"""
timestamp: datetime
"""
Message timestamp as a timezone-naive UTC datetime.
"""
from_email: str
"""
Sender email address.
"""
from_name: Optional[str]
"""
Optional human-readable sender name.
"""
subject: str
"""
Raw subject line of the message.
"""
body_text: str
"""
Extracted plain-text body content of the message.
"""
snippet: str
"""
Short provider-supplied preview snippet of the message.
"""
raw_headers: Dict[str, str]
"""
Normalized mapping of message headers (header name → value).
"""