生产环境下使用Nodemailer无法发送邮件问题求助
Nodemailer本地发送正常,生产环境返回成功但收不到邮件
本地Node.js服务使用Nodemailer发送邮件完全正常,但部署到生产服务器后,接口返回发送成功日志,却始终收不到邮件。已检查防火墙、SMTP端口配置,甚至关闭防火墙测试,问题依旧。
以下是发送邮件的代码:
export const securityEmailSender = async ( senderEmail: string, subject: string, body: string ): Promise<void> => { const transporter: Transporter = nodemailer.createTransport({ host: appConfig.host, port: appConfig.port, // secure: true, auth: { user: "***", pass: "***", }, }); // setup email data with unicode symbols const mailOptions = { from: `${appConfig.brandName} <***>`, to: senderEmail, subject: subject, html: body, }; // send mail with defined transport object try { const info = await transporter.sendMail(mailOptions); console.log("Message sent: " + info.response); } catch (error) { console.log(error); } };
排查方向:
- 修正
secure配置:生产环境SMTP服务对加密要求更严格,若端口是465,必须开启secure: true;若为587,需设secure: false并添加requireTLS: true。本地环境可能宽松所以不受影响,但生产环境会因为加密不规范导致邮件被拦截。 - 核对发件人地址:
mailOptions.from必须和SMTP auth的user地址完全一致,多数邮件服务商(如Gmail、企业邮箱)会拦截发件人与认证账号不符的邮件,且不会返回错误。 - 开启SMTP调试日志:给
createTransport添加debug: true,或者监听log事件获取详细交互日志,确认邮件是否真的被SMTP服务器接收:transporter.on('log', (data) => { console.log('SMTP交互日志:', data); }); - 检查邮件服务商的IP白名单/域名配置:很多邮件服务要求生产服务器IP加入发信白名单,或配置DKIM、SPF记录。本地IP可能已在白名单内,生产IP未备案则会被拦截。
- 排查收件人垃圾邮件文件夹:部分邮件会被判定为垃圾邮件,直接进入收件人的垃圾站或订阅邮件目录,而非被拒收。
- 验证生产环境配置:确认
appConfig的生产环境参数(host、port)与本地一致,避免因环境变量配置错误连接到错误的SMTP服务器。
内容的提问来源于stack exchange,提问作者Dillip Kumar Sahu
相关产品推荐
相关产品推荐

