部署至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
相关产品推荐
相关产品推荐

