Skip to content

Error when trying to reset password using @payloadcms/email-resend #12714

Open
@amatosc

Description

@amatosc

Describe the Bug

When attempting to recover a password via the admin panel and using @payloadcms/email-resend, the process appears to complete successfully in the UI, but a 400 validation_error is logged in the backend.

Payload log:

GET /admin/forgot 200 in 29ms
[12:07:18] ERROR: Error sending email: 400 validation_error - Something went wrong
    err: {
      "type": "APIError",
      "message": "Error sending email: 400 validation_error - Something went wrong",
      "stack":
          APIError: Error sending email: 400 validation_error - Something went wrong
              at Object.sendEmail (file:///private/tmp/payload-test/node_modules/.pnpm/@payloadcms+email-resend@3.40.0_payload@3.40.0_graphql@16.11.0_typescript@5.7.3_/node_modules/@payloadcms/email-resend/dist/index.js:30:27)
              at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
              at async forgotPasswordOperation (file:///private/tmp/payload-test/node_modules/.pnpm/payload@3.40.0_graphql@16.11.0_typescript@5.7.3/node_modules/payload/dist/auth/operations/forgotPassword.js:113:13)
              at async forgotPasswordHandler (file:///private/tmp/payload-test/node_modules/.pnpm/payload@3.40.0_graphql@16.11.0_typescript@5.7.3/node_modules/payload/dist/auth/endpoints/forgotPassword.js:15:5)
              at async handleEndpoints (file:///private/tmp/payload-test/node_modules/.pnpm/payload@3.40.0_graphql@16.11.0_typescript@5.7.3/node_modules/payload/dist/utilities/handleEndpoints.js:169:26)
              at async eval (webpack-internal:///(rsc)/./node_modules/.pnpm/@payloadcms+next@3.40.0_@types+react@19.1.0_graphql@16.11.0_monaco-editor@0.52.2_next@1_8fa20fde2834961feb1a02740cbc6e5c/node_modules/@payloadcms/next/dist/routes/rest/index.js:30:20)
              at async AppRouteRouteModule.do (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:26:34112)
              at async AppRouteRouteModule.handle (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:26:41338)
              at async doRender (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:1513:42)
              at async DevServer.renderToResponseWithComponentsImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:1915:28)
              at async DevServer.renderPageComponent (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:2403:24)
              at async DevServer.renderToResponseImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:2440:32)
              at async DevServer.pipeImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:1007:25)
              at async NextNodeServer.handleCatchallRenderRequest (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/next-server.js:305:17)
              at async DevServer.handleRequestImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/base-server.js:899:17)
              at async /private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:371:20
              at async Span.traceAsyncFn (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/trace/trace.js:157:20)
              at async DevServer.handleRequest (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/dev/next-dev-server.js:368:24)
              at async invokeRender (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:237:21)
              at async handleRequest (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:428:24)
              at async requestHandlerImpl (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/router-server.js:452:13)
              at async Server.requestListener (/private/tmp/payload-test/node_modules/.pnpm/next@15.3.0_react-dom@19.1.0_react@19.1.0__react@19.1.0_sass@1.77.4/node_modules/next/dist/server/lib/start-server.js:158:13)
      "data": null,
      "isOperational": true,
      "isPublic": false,
      "status": 400,
      "name": "APIError"
    }
POST /api/users/forgot-password 400 in 718ms

Resend log:

{
  "name": "validation_error",
  "message": "Something went wrong",
  "statusCode": 400
}

Link to the code that reproduces this issue

https://github.com/amatosc/payload

Reproduction Steps

  1. Create a new Payload project.
  2. Install @payloadcms/email-resend
  3. Configure the email adapter in your Payload config.
  4. Start the Payload server.
  5. Open the admin panel and go to the login screen.
  6. Click on “Forgot password” and enter a valid user email.
  7. Check the server logs – observe the 400 validation_error and error stack, despite the UI showing a successful response.

Which area(s) are affected? (Select all that apply)

email-nodemailer

Environment Info

Binaries:
  Node: 22.15.1
  npm: 10.9.2
  Yarn: N/A
  pnpm: 10.11.0
Relevant Packages:
  payload: 3.40.0
  next: 15.3.0
  @payloadcms/db-mongodb: 3.40.0
  @payloadcms/email-nodemailer: 3.40.0
  @payloadcms/email-resend: 3.40.0
  @payloadcms/graphql: 3.40.0
  @payloadcms/next/utilities: 3.40.0
  @payloadcms/payload-cloud: 3.40.0
  @payloadcms/richtext-lexical: 3.40.0
  @payloadcms/translations: 3.40.0
  @payloadcms/ui/shared: 3.40.0
  react: 19.1.0
  react-dom: 19.1.0
Operating System:
  Platform: darwin
  Arch: arm64
  Version: Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:49 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T6000
  Available memory (MB): 65536
  Available CPU cores: 10

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: needs-triagePossible bug which hasn't been reproduced yet

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions