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

Vercel部署后Nodemailer无法收邮件求助(日志显示发送成功)

Nodemailer部署到Vercel后无法接收邮件的解决方案
  • 检查邮件服务商安全策略
    很多邮箱服务商(比如Gmail、QQ邮箱)会拦截Vercel这类云平台发出的邮件,因为平台IP可能被纳入垃圾邮件池。

    • 先去邮箱的垃圾邮件文件夹看看,说不定邮件被归类到那了。
    • 务必开启SMTP服务的授权码(不是登录密码):Gmail需要开启两步验证后生成应用专用密码;QQ邮箱要先开启POP3/SMTP服务,再获取授权码。
  • 确认Vercel环境变量配置
    本地测试时可能直接硬编码了邮箱账号和密码,但部署到Vercel必须用环境变量,硬编码的信息不会生效。

    • 进入Vercel项目的Settings -> Environment Variables,添加EMAIL_USER(发件人邮箱)、EMAIL_PASS(授权码)这两个变量。
    • 确保Nodemailer配置里正确读取这些变量,示例代码:
      const transporter = nodemailer.createTransport({
        service: 'Gmail',
        auth: {
          user: process.env.EMAIL_USER,
          pass: process.env.EMAIL_PASS
        }
      });
      
    • 添加完变量后必须重新部署项目,否则新变量不会生效。
  • 验证Nodemailer配置细节
    不同邮箱服务商的SMTP端口和加密方式要求不同,配置错了会导致邮件发不出去。

    • 比如Gmail的正确配置:用465端口+SSL,或者587端口+TLS,示例:
      const transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 465,
        secure: true, // 465端口设为true,其他端口设为false
        auth: {
          user: process.env.EMAIL_USER,
          pass: process.env.EMAIL_PASS
        }
      });
      
    • 发件人邮箱必须和EMAIL_USER一致,部分服务商不允许使用不同的发件人地址。
  • 排查Vercel无服务器函数限制
    Vercel的Serverless Functions最长执行时间是10秒,如果邮件发送过程超时,日志可能显示200,但实际发送没完成。

    • 查看函数的详细日志,确认transporter.sendMail的回调里是否有隐藏错误,别只看HTTP状态码。
    • 优化邮件发送逻辑,确保在10秒内完成;如果需要更长时间,考虑用异步任务队列(免费版Vercel可能不支持,可自行评估)。
  • 配置邮件验证记录(DKIM/SPF/DMARC)
    缺少这些记录的邮件很容易被拒收或归为垃圾邮件。

    • 登录域名服务商后台,添加SPF记录:比如用Gmail+Vercel的话,可设为v=spf1 include:_spf.google.com include:vercel.com ~all。
    • 添加DKIM记录:从你的邮件服务商获取公钥,在域名解析里添加对应的TXT记录。
    • 添加DMARC记录:设置邮件的处理规则,比如v=DMARC1; p=none; sp=none; rua=mailto:dmarc@yourdomain.com。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:42:36