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

部署至Vercel后Nodemailer出现连接超时问题求助

解决Vercel部署Nodemailer连接Gmail SMTP超时问题

核心排查方向及解决方案

1. 优先检查Gmail的认证配置

Gmail默认禁止第三方应用使用普通账号密码登录,这是部署后超时最常见的原因(本地可能已通过授权或临时策略绕过):

  • 开启两步验证(2FA)后,生成专门的应用密码(App Password),替换代码中auth.pass的值。
  • 若未开启2FA,可临时开启"不太安全的应用访问"(不推荐生产环境使用),但Gmail后续可能逐步淘汰该选项。

2. 优化Nodemailer的超时配置

Vercel的Serverless函数环境网络延迟可能高于本地,可增加超时参数避免连接中断:

let transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 587,
    secure: false,
    auth: {
        user: '你的邮箱地址',
        pass: '你的应用密码', // 替换为App Password
    },
    tls: {
        rejectUnauthorized: false,
    },
    connectionTimeout: 15000, // 延长连接超时至15秒
    greetingTimeout: 15000,
    socketTimeout: 15000
});

3. 改用Gmail API发送邮件(推荐生产环境)

直接SMTP连接可能受Vercel网络策略限制,改用Gmail API更稳定:

  • 借助google-auth-library生成OAuth2令牌,配置Nodemailer使用OAuth2认证:
const { google } = require('googleapis');
const OAuth2 = google.auth.OAuth2;

const oauth2Client = new OAuth2(
    '你的客户端ID',
    '你的客户端密钥',
    'https://developers.google.com/oauthplayground'
);

oauth2Client.setCredentials({
    refresh_token: '你的刷新令牌'
});

let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        type: 'OAuth2',
        user: '你的邮箱地址',
        clientId: '你的客户端ID',
        clientSecret: '你的客户端密钥',
        refreshToken: '你的刷新令牌',
        accessToken: oauth2Client.getAccessToken()
    }
});

4. 防火墙/网络问题的处理

如果以上方案均无效,可能是Vercel侧的出站网络限制:

  • 直接通过Vercel控制台的Support入口联系官方支持团队,说明你的SMTP连接超时问题,请求排查网络策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:02:41