NextJS 13生产环境发邮件报502错误,开发环境正常求助
解决方案:Netlify部署NextJS 13 App Router后Nodemailer邮件发送502错误
问题背景
使用NextJS 13 App Router构建作品集网站,联系表单通过api/email/route.ts的Nodemailer实现邮件发送,本地环境可正常发送,部署到Netlify并绑定域名后出现502网关错误,此前Pages Router版本的相同功能可正常运行。
排查与解决步骤
1. 修正Gmail认证配置(核心)
- 若Google账号开启了2FA,必须使用App Password替代普通登录密码,普通密码在生产环境会被Google安全策略拦截。
- 若未开启2FA,需在Google账号设置中开启“不太安全的应用访问”(不推荐,建议优先开启2FA并使用App Password)。
- 确认
EMAIL_ACCOUNT和EMAIL_PASSWORD在Netlify环境变量中配置正确,变量名与代码完全匹配,配置完成后需触发重新部署使变量生效。
2. 优化Nodemailer传输配置
移除tls.rejectUnauthorized: false(该设置会跳过证书验证,在生产环境易引发安全问题和连接异常),并手动指定SMTP参数替代service: "Gmail",提升跨环境兼容性:
const transporter = nodemailer.createTransport({ host: "smtp.gmail.com", port: 465, secure: true, // 启用SSL加密 auth: { user: process.env.EMAIL_ACCOUNT, pass: process.env.EMAIL_PASSWORD, }, });
3. 延长Netlify函数超时时间
Netlify默认函数超时为10秒,邮件发送操作可能因网络延迟触发超时,进而导致502错误。在项目根目录创建或修改netlify.toml:
[functions] timeout = 20 # 延长至20秒,可根据实际情况调整
4. 确保Netlify NextJS插件版本兼容
NextJS 13 App Router要求Netlify的@netlify/plugin-nextjs版本≥4.0.0,检查package.json中的依赖:
{ "devDependencies": { "@netlify/plugin-nextjs": "^4.0.0" } }
若版本过低,执行npm install @netlify/plugin-nextjs@latest更新后重新部署。
5. 通过Netlify日志定位具体错误
502是网关层面的错误,实际函数执行异常需查看Netlify函数日志:
- 进入Netlify站点后台 → Functions → 找到
api/email函数 → 查看Logs - 日志会显示具体错误原因(如环境变量未定义、SMTP连接被拒绝等),根据信息针对性修复。
内容的提问来源于stack exchange,提问作者Omar Barazi
相关产品推荐
相关产品推荐

