You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中Nodemailer发送邮件返回响应时报错的解决求助

解决Next.js邮件发送接口返回响应时的headers未定义错误

问题场景

Next.js项目中,仅执行邮件发送逻辑时功能正常,但尝试通过NextResponse.json返回发送结果时,触发以下错误:

error TypeError: Cannot read properties of undefined (reading 'headers')
    at eval (webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.js:266:61)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

原正常运行的邮件发送代码:

await transporter
    .sendMail(options)
    .then((info) => {
      console.log("Email sent:", info.response);
    })
    .catch((error) => {
      console.log("Email not sent:", error);
    });

期望实现的带响应返回的代码:

await transporter
    .sendMail(options)
    .then((info) => {
      console.log("Email sent:", info.response);
      return NextResponse.json({ status: "sent" });
    })
    .catch((error) => {
      console.log("Email not sent:", error);
      return NextResponse.json({ status: "error" });
    });

问题原因

混合使用await与.then/.catch的异步写法,导致NextResponse对象没有被正确作为路由处理函数的最终返回值传递给Next.js,进而引发框架读取headers属性时的未定义错误。

解决方案

改用纯try/catch配合await的写法,让路由函数直接返回响应对象:

try {
  const info = await transporter.sendMail(options);
  console.log("Email sent:", info.response);
  return NextResponse.json({ status: "sent" });
} catch (error) {
  console.log("Email not sent:", error);
  return NextResponse.json({ status: "error" }, { status: 500 });
}

说明

  • 移除Promise链式调用,用try/catch捕获异步错误,确保NextResponse直接作为路由函数的返回值,让Next.js能正确解析响应头。
  • 错误场景下建议附加status: 500状态码,遵循HTTP规范,方便前端精准判断请求状态。

内容的提问来源于stack exchange,提问作者pablofdezr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:39:54