AshDispatch.Transports.Email (AshDispatch v0.5.0)

View Source

Email transport via Oban jobs.

Enqueues email delivery jobs for asynchronous sending.

Behavior

  1. Checks user preferences (if event is user_configurable)
  2. Resolves recipients from context
  3. Enqueues Oban jobs for each recipient
  4. 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.

Functions

deliver(receipt, context, channel, event_config)

Delivers email by enqueueing Oban job.

Parameters

  • receipt - DeliveryReceipt map
  • context - Event context
  • channel - Channel configuration
  • event_config - Event configuration

Returns

  • {:ok, updated_receipt} on success
  • {:error, reason} on failure