NextJS邮件API在AWS Amplify上失效,报SSL版本号错误
问题分析
你遇到的ssl3_get_record:wrong version number错误,本质是SSL握手时协议版本不匹配导致的。本地运行正常但部署到AWS Amplify后出错,核心原因大概率是SMTP客户端加密配置与Gmail服务器要求不匹配,或是Amplify环境的网络/配置细节影响。
解决方案
1. 对齐SMTP端口与加密配置
Gmail SMTP的端口和加密方式是严格对应的:
- 端口465 → 必须启用SSL加密
- 端口587 → 必须启用STARTTLS加密
假设你使用nodemailer作为邮件客户端,对应配置如下:
用465端口的配置
const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: process.env.SMTP_PORT, secure: true, // 465端口必须设为true auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, });
用587端口的配置
const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: 587, secure: false, requireTLS: true, // 强制触发STARTTLS握手 auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, });
2. 验证Gmail账号安全设置
- 若账号开启了2FA,必须使用Google App密码代替普通密码(在Google账号设置的「安全」板块生成)
- 未开启2FA的账号,需暂时开启「低安全性应用访问」(Gmail官方不推荐,但可用于排查问题)
3. 确认Amplify环境变量配置
登录Amplify控制台,检查环境变量SMTP_HOST、SMTP_PORT、SMTP_USER、SMTP_PASS是否完全正确,无拼写错误,且端口与加密配置严格对应。
4. 测试Amplify网络连通性
在你的API路由中添加一段测试代码,验证Amplify服务器能否正常连接Gmail SMTP:
import net from 'net'; export default async function handler(req, res) { const socket = net.createConnection(process.env.SMTP_PORT, process.env.SMTP_HOST, () => { console.log('SMTP服务器连接成功'); socket.end(); res.status(200).json({ status: 'connected' }); }); socket.on('error', (err) => { console.error('连接失败:', err); res.status(500).json({ error: err.message }); }); }
如果连接失败,需检查Amplify的VPC配置(若使用自定义VPC),确保出站流量允许访问465/587端口。
5. 强制指定SSL/TLS版本(临时排查方案)
若Amplify环境的OpenSSL版本与Gmail服务器不兼容,可强制指定TLS版本:
const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: process.env.SMTP_PORT, secure: true, tls: { minVersion: 'TLSv1.2', // 强制使用TLS 1.2 rejectUnauthorized: true, // 保持开启,避免安全风险 }, auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, });
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

