Send, fetch and cancel emails.
Input maps use snake_case keys (:reply_to, :scheduled_at); :to, :cc,
:bcc and :reply_to take a string or a list of strings.
MillionSend.Emails.send(%{
from: "Acme <onboarding@acme.dev>",
to: "delivered@resend.dev",
subject: "Hello",
html: "<strong>it works</strong>"
})
Summary
Functions
POST /emails/:id/cancel — only scheduled, unsent emails.
GET /emails/:id
GET /emails/:id/insights — the email's deliverability insights report.
Returns a "not_found" error until insights exist for the email.
POST /emails. Accepts an optional leading client and an optional
idempotency_key: in the trailing options.
POST /emails/batch — 1..100 emails in one call; supports idempotency_key:.
Functions
@spec cancel(MillionSend.Client.t(), String.t()) :: {:ok, MillionSend.Emails.Email.t()} | {:error, MillionSend.Error.t()}
POST /emails/:id/cancel — only scheduled, unsent emails.
@spec get(MillionSend.Client.t(), String.t()) :: {:ok, MillionSend.Emails.Email.t()} | {:error, MillionSend.Error.t()}
GET /emails/:id
@spec get_insights(MillionSend.Client.t(), String.t()) :: {:ok, MillionSend.Emails.Insights.t()} | {:error, MillionSend.Error.t()}
GET /emails/:id/insights — the email's deliverability insights report.
Returns a "not_found" error until insights exist for the email.
@spec send(map()) :: {:ok, MillionSend.Emails.Email.t()} | {:error, MillionSend.Error.t()}
POST /emails. Accepts an optional leading client and an optional
idempotency_key: in the trailing options.
@spec send(MillionSend.Client.t() | map(), map() | keyword()) :: {:ok, MillionSend.Emails.Email.t()} | {:error, MillionSend.Error.t()}
@spec send(MillionSend.Client.t(), map(), keyword()) :: {:ok, MillionSend.Emails.Email.t()} | {:error, MillionSend.Error.t()}
@spec send_batch([map()]) :: {:ok, [MillionSend.Emails.Email.t()]} | {:error, MillionSend.Error.t()}
POST /emails/batch — 1..100 emails in one call; supports idempotency_key:.
@spec send_batch(MillionSend.Client.t() | [map()], [map()] | keyword()) :: {:ok, [MillionSend.Emails.Email.t()]} | {:error, MillionSend.Error.t()}
@spec send_batch(MillionSend.Client.t(), [map()], keyword()) :: {:ok, [MillionSend.Emails.Email.t()]} | {:error, MillionSend.Error.t()}