Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions apps/fumadocs/content/docs/adapters/brevo.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,10 @@ BREVO_API_KEY="xkeysib-..." npx email-sdk send \
```

Drop `--dry-run` for one real send to confirm the key, sender verification, and recipient policy end to end.

## Compare Brevo with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [SendGrid vs Brevo](/compare/sendgrid-vs-brevo)
- [Brevo vs MailerSend](/compare/brevo-vs-mailersend)
13 changes: 10 additions & 3 deletions apps/fumadocs/content/docs/adapters/loops.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ export const email = createEmailClient({
required: true,
},
transactionalId: {
description: "Published transactional email to render. Must be non-empty; the adapter throws at construction otherwise.",
description:
"Published transactional email to render. Must be non-empty; the adapter throws at construction otherwise.",
type: "string",
required: true,
},
Expand Down Expand Up @@ -74,8 +75,8 @@ Attachments are supported and sent as `{ filename, contentType, data }` with bas
<Callout type="warn" title="Attachments need account enablement">
Loops only accepts transactional attachments on accounts where the capability has been enabled.
Without it, sends with attachments fail at the API. Also note `cc`, `bcc`, `replyTo`, `headers`,
and `tags` throw an `EmailValidationError` before any request; see
[field support](/docs/adapters/field-support).
and `tags` throw an `EmailValidationError` before any request; see [field
support](/docs/adapters/field-support).
</Callout>

## Verify from the CLI
Expand All @@ -95,3 +96,9 @@ LOOPS_API_KEY="..." LOOPS_TRANSACTIONAL_ID="cm..." npx email-sdk send \
```

Drop `--dry-run` to trigger one real template send and confirm the API key and published transactional email are live.

## Compare Loops with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [Resend vs Loops](/compare/resend-vs-loops)
15 changes: 11 additions & 4 deletions apps/fumadocs/content/docs/adapters/mailersend.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ console.log(result.id); // MailerSend message id from the x-message-id header
The response `id` comes from the `x-message-id` response header, falling back to `message_id` or `id` in the body. Use it to look the send up in MailerSend's activity log.

<Callout type="warn" title="No metadata field">
MailerSend has no metadata concept, so `metadata` on a message throws an
`EmailValidationError` before any request is made. Use `tags` instead, or pick a
[metadata-capable adapter](/docs/adapters/field-support). MailerSend also gates custom
`headers` behind its Professional and Enterprise plans.
MailerSend has no metadata concept, so `metadata` on a message throws an `EmailValidationError`
before any request is made. Use `tags` instead, or pick a [metadata-capable
adapter](/docs/adapters/field-support). MailerSend also gates custom `headers` behind its
Professional and Enterprise plans.
</Callout>

## Verify from the CLI
Expand All @@ -83,3 +83,10 @@ MAILERSEND_API_KEY="mlsn..." npx email-sdk send \
```

Drop `--dry-run` for one real send. The token, domain verification, and plan limits only prove themselves against the live API.

## Compare MailerSend with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [Resend vs MailerSend](/compare/resend-vs-mailersend)
- [Brevo vs MailerSend](/compare/brevo-vs-mailersend)
13 changes: 11 additions & 2 deletions apps/fumadocs/content/docs/adapters/mailgun.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ export const email = createEmailClient({
/>

<Callout type="warn" title="EU domains need the EU base URL">
Domains created in Mailgun's EU region only respond on
`baseUrl: "https://api.eu.mailgun.net"`. Against the default US origin they fail with a 404.
Domains created in Mailgun's EU region only respond on `baseUrl: "https://api.eu.mailgun.net"`.
Against the default US origin they fail with a 404.
</Callout>

## Send
Expand Down Expand Up @@ -111,3 +111,12 @@ MAILGUN_API_KEY="key-..." npx email-sdk send \
```

Credentials also work as flags: `--api-key`, `--domain`, and `--base-url` (or `MAILGUN_BASE_URL`) override the environment. Drop `--dry-run` for one real send to prove the domain's DNS records and the account are actually ready.

## Compare Mailgun with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [Resend vs Mailgun](/compare/resend-vs-mailgun)
- [Postmark vs Mailgun](/compare/postmark-vs-mailgun)
- [SendGrid vs Mailgun](/compare/sendgrid-vs-mailgun)
- [Mailgun vs AWS SES](/compare/mailgun-vs-ses)
13 changes: 11 additions & 2 deletions apps/fumadocs/content/docs/adapters/postmark.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ console.log(result.id); // Postmark MessageID, also exposed as result.messageId

<Callout type="warn" title="One tag per message">
Postmark has a single `Tag` field. The adapter serializes the first tag as `name:value` and a
second tag throws an `EmailValidationError` before any request is made. Need multiple tags?
Check the [field support matrix](/docs/adapters/field-support).
second tag throws an `EmailValidationError` before any request is made. Need multiple tags? Check
the [field support matrix](/docs/adapters/field-support).
</Callout>

## Verify from the CLI
Expand All @@ -97,3 +97,12 @@ POSTMARK_SERVER_TOKEN="..." npx email-sdk send \
```

The token also accepts the `--server-token` flag. Drop `--dry-run` for one real send to confirm the server token, sender signature, and message stream actually work together.

## Compare Postmark with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [Resend vs Postmark](/compare/resend-vs-postmark)
- [Postmark vs SendGrid](/compare/postmark-vs-sendgrid)
- [Postmark vs Mailgun](/compare/postmark-vs-mailgun)
- [Postmark vs AWS SES](/compare/postmark-vs-ses)
15 changes: 13 additions & 2 deletions apps/fumadocs/content/docs/adapters/resend.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ console.log(result.id); // Resend email id, also exposed as result.messageId
The `idempotencyKey` is sent as Resend's `Idempotency-Key` header, so retried requests cannot double-send.

<Callout type="warn" title="No metadata field">
Resend has no metadata concept, so `metadata` on a message throws an `EmailValidationError`
before any request is made. Use `tags` instead, or pick a [metadata-capable
Resend has no metadata concept, so `metadata` on a message throws an `EmailValidationError` before
any request is made. Use `tags` instead, or pick a [metadata-capable
adapter](/docs/adapters/field-support).
</Callout>

Expand All @@ -92,3 +92,14 @@ RESEND_API_KEY="re_..." npx email-sdk send \
```

Drop `--dry-run` to perform one real send from the environment that will send production email. Local validation cannot tell you whether the account, sender domain, and recipient policy are actually ready; one live send can.

## Compare Resend with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [Resend vs Postmark](/compare/resend-vs-postmark)
- [Resend vs SendGrid](/compare/resend-vs-sendgrid)
- [Resend vs AWS SES](/compare/resend-vs-ses)
- [Resend vs Mailgun](/compare/resend-vs-mailgun)
- [Resend vs Loops](/compare/resend-vs-loops)
- [Resend vs MailerSend](/compare/resend-vs-mailersend)
10 changes: 10 additions & 0 deletions apps/fumadocs/content/docs/adapters/sendgrid.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,13 @@ SENDGRID_API_KEY="SG...." npx email-sdk send \
```

Drop `--dry-run` for one real send. SendGrid account review and sender verification can block delivery even when the payload validates, and only a live send proves they are done.

## Compare SendGrid with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [Resend vs SendGrid](/compare/resend-vs-sendgrid)
- [Postmark vs SendGrid](/compare/postmark-vs-sendgrid)
- [SendGrid vs Mailgun](/compare/sendgrid-vs-mailgun)
- [SendGrid vs AWS SES](/compare/sendgrid-vs-ses)
- [SendGrid vs Brevo](/compare/sendgrid-vs-brevo)
13 changes: 11 additions & 2 deletions apps/fumadocs/content/docs/adapters/ses.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ console.log(result.id); // SES MessageId, also exposed as result.messageId

<Callout type="warn" title="No metadata field">
SES v2 `SendEmail` has no metadata concept, so `metadata` on a message throws an
`EmailValidationError` before any request is made. Use `tags` instead, or pick a
[metadata-capable adapter](/docs/adapters/field-support).
`EmailValidationError` before any request is made. Use `tags` instead, or pick a [metadata-capable
adapter](/docs/adapters/field-support).
</Callout>

## Verify from the CLI
Expand All @@ -113,3 +113,12 @@ npx email-sdk send \
```

`--session-token` and `--configuration-set` flags are also available. Drop `--dry-run` for one real send. It is the only way to prove the identity is verified and the account is out of the SES sandbox.

## Compare AWS SES with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

- [Resend vs AWS SES](/compare/resend-vs-ses)
- [Postmark vs AWS SES](/compare/postmark-vs-ses)
- [SendGrid vs AWS SES](/compare/sendgrid-vs-ses)
- [Mailgun vs AWS SES](/compare/mailgun-vs-ses)
Loading