@beignet/provider-mail-resend
v0.0.3
Published
Resend mail provider for Beignet - adds mailer port using Resend
Maintainers
Readme
@beignet/provider-mail-resend
Resend-backed mail provider for Beignet.
The provider installs the app-facing ctx.ports.mailer port and exposes
ctx.ports.resend.client only as an escape hatch for Resend-specific features.
Install
bun add @beignet/provider-mail-resend resendSetup
import { mailResendProvider } from "@beignet/provider-mail-resend";
import { createServer } from "@beignet/core/server";
const server = await createServer({
ports: basePorts,
providers: [mailResendProvider],
createContext: ({ ports }) => ({ ports }),
routes,
});Required environment variables:
| Variable | Description |
| --- | --- |
| RESEND_API_KEY | Resend API key |
| RESEND_FROM | Default sender, e.g. My App <[email protected]> |
Use in application code
await ctx.ports.mailer.send({
to: "[email protected]",
subject: "Welcome",
html: "<h1>Hello</h1>",
});The same MailerPort works with SMTP, memory fakes, and other adapters:
await ctx.ports.mailer.send({
from: { email: "[email protected]", name: "Support" },
to: ["[email protected]", "[email protected]"],
replyTo: "[email protected]",
subject: "Account updated",
text: "Your account was updated.",
html: "<p>Your account was updated.</p>",
});Escape hatch
Use the Resend client only when you need a Resend-specific feature not covered
by MailerPort:
await ctx.ports.resend.client.emails.send({
from: "[email protected]",
to: "[email protected]",
subject: "Invoice",
html: "<p>Attached.</p>",
attachments: [
{
filename: "invoice.pdf",
content: pdfBuffer,
},
],
});Devtools
When ctx.ports.devtools is installed, this provider records mail.send,
mail.sent, and mail.failed events under the mail watcher.
Errors
Delivery failures throw MailDeliveryError from @beignet/core/mail.
Startup configuration problems throw during provider setup.
License
MIT
