AshDispatch.Transports.Email (AshDispatch v0.5.0)
View SourceEmail transport via Oban jobs.
Enqueues email delivery jobs for asynchronous sending.
Behavior
- Checks user preferences (if event is user_configurable)
- Resolves recipients from context
- Enqueues Oban jobs for each recipient
- Updates receipt status to
:scheduled
Status Flow
pending → scheduled (job enqueued)
↘ skipped (user opted out or no recipients)
Later (in Oban worker):
scheduled → sending (job started)
→ sent (email delivered)
↘ failed (delivery error)Delayed Delivery
Supports delayed delivery via channel's time field:
channel = %Channel{
transport: :email,
time: {:in, 300} # Deliver in 5 minutes
}Example
receipt = %{
content: %{
subject: "Order Created",
from: "orders@example.com",
html_body: "<h1>Order #1234</h1>",
text_body: "Order #1234 created"
}
}
Email.deliver(receipt, context, channel, event_config)
# -> Enqueues Oban job
# -> Returns {:ok, updated_receipt}
Summary
Functions
Delivers email by enqueueing Oban job.