From e5b647a1547307dd63a01cad9cdcadce6b6b8c38 Mon Sep 17 00:00:00 2001 From: Khushal Bhardwaj Date: Sun, 21 Jun 2026 21:42:58 +0530 Subject: [PATCH] feat(email): add Resend email adapter Wire @payloadcms/email-resend into the Payload config via the email key, reading the API key and default from-address/name from env vars. Co-Authored-By: Claude Opus 4.8 --- package.json | 1 + payload.config.ts | 6 ++++++ pnpm-lock.yaml | 13 +++++++++++++ 3 files changed, 20 insertions(+) diff --git a/package.json b/package.json index 2ad58d5..88b3fd8 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@lexical/markdown": "0.35.0", "@lexical/react": "0.35.0", "@payloadcms/db-vercel-postgres": "^3.75.0", + "@payloadcms/email-resend": "^3.85.1", "@payloadcms/next": "^3.75.0", "@payloadcms/richtext-lexical": "^3.75.0", "@payloadcms/ui": "^3.75.0", diff --git a/payload.config.ts b/payload.config.ts index d6d0629..fd873e6 100644 --- a/payload.config.ts +++ b/payload.config.ts @@ -3,6 +3,7 @@ import { lexicalEditor, BlocksFeature } from "@payloadcms/richtext-lexical"; import { MarkdownPasteFeature } from "./features/markdown-paste/feature.server"; import { codeBlock } from "./features/code-block"; import { vercelPostgresAdapter } from "@payloadcms/db-vercel-postgres"; +import { resendAdapter } from "@payloadcms/email-resend"; import path from "path"; import { fileURLToPath } from "url"; import sharp from "sharp"; @@ -41,5 +42,10 @@ export default buildConfig({ connectionString: process.env.DATABASE_URI || "", }, }), + email: resendAdapter({ + defaultFromAddress: process.env.RESEND_FROM_ADDRESS || "onboarding@resend.dev", + defaultFromName: process.env.RESEND_FROM_NAME || "celeroncoder", + apiKey: process.env.RESEND_API_KEY || "", + }), sharp, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aaed35b..4dcbe2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: '@payloadcms/db-vercel-postgres': specifier: ^3.75.0 version: 3.75.0(@types/pg@8.11.6)(payload@3.75.0(bufferutil@4.1.0)(graphql@16.12.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) + '@payloadcms/email-resend': + specifier: ^3.85.1 + version: 3.85.1(payload@3.75.0(bufferutil@4.1.0)(graphql@16.12.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) '@payloadcms/next': specifier: ^3.75.0 version: 3.75.0(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@16.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.75.0(bufferutil@4.1.0)(graphql@16.12.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) @@ -1081,6 +1084,12 @@ packages: peerDependencies: payload: 3.75.0 + '@payloadcms/email-resend@3.85.1': + resolution: {integrity: sha512-yUXcCXb2tJ0ktAzfGlmgo7CLhUDgSwWoc6S+BAkmsDSW89TUYFWzByUT1M+eJpoxIDByQ8x/ghndOyqgVbWoEg==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + payload: 3.85.1 + '@payloadcms/graphql@3.75.0': resolution: {integrity: sha512-FJ5BSuSIlRUWGZS58hrGKHeXBjBIWadLxlH6X7eOeTRkWZ8hfYNE/QXNhGByannvsfneke/WKUIobm50RApo7w==} hasBin: true @@ -3638,6 +3647,10 @@ snapshots: - sql.js - sqlite3 + '@payloadcms/email-resend@3.85.1(payload@3.75.0(bufferutil@4.1.0)(graphql@16.12.0)(typescript@5.9.3)(utf-8-validate@6.0.6))': + dependencies: + payload: 3.75.0(bufferutil@4.1.0)(graphql@16.12.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@payloadcms/graphql@3.75.0(graphql@16.12.0)(payload@3.75.0(bufferutil@4.1.0)(graphql@16.12.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(typescript@5.9.3)': dependencies: graphql: 16.12.0