Mail Document Flow
Email contact and subscription statuses with explicit UI honesty — outbox is pipeline state, not ETA Approve/Reject Actions.
Mail Document Flow
Mail uses contact and subscription status enums for directory reachability. Message outbox state lives on framework email entities — not an EtaActionPolicy Actions menu.
Hub: Target Document Flow. Overview: Mail. Campaigns: Newsletter Document Flow.
- Active
- NotYetVerified
- Inactive / Bounced
- Unsubscribed / Forgotten
Email contact
#Statuses (EmailContactStatus)
| Status | Meaning |
|---|---|
Active |
Eligible source record |
Inactive |
Disabled / blacklisted source |
NotYetVerified |
Valid email; consent/verification incomplete |
Also: IsEmailReachable on the unified contact; per-channel detail via subscription resolver.
Contact subscription (per channel)
#Statuses (ContactSubscriptionStatus)
Active, Inactive, Unsubscribed, Bounced, NotYetVerified, Forgotten
Contact subscription — per-channel status
flowchart TB Start((Subscribe)) --> NYV[NotYetVerified] NYV -->|Verify consent| Active[Active] Active -->|Opt out| Unsub[Unsubscribed] Active -->|Hard bounce| Bounced[Bounced] Active -->|Pause channel| Inactive[Inactive] Inactive -->|Resume channel| Active Active -->|GDPR forget| Forgotten[Forgotten] class Start egkStart class NYV egkActive class Active egkSuccess class Inactive,Bounced egkWarn class Unsub,Forgotten egkTerminal
Compose / directory / outbox
UI surfaces: Compose, Contact Directory, Dashboard (toolbars present). Outbox/send progress uses entity fields on the framework email pipeline.
#Post-action sync
Directory grids refresh after contact/subscription updates. Failed sends leave outbox items pending/failed without inventing Approve/Reject.
#Scenarios
| Scenario | Result |
|---|---|
| Complete verification | Contact/subscription → Active |
| Hard bounce | Subscription → Bounced |
| Opt out | Unsubscribed |
| GDPR forget | Forgotten |