Node.js代码执行正常但邮件无法发送问题求助
解决Node.js中Nodemailer无法发送Outlook邮件的问题
我帮你排查下这个邮件发送失败的问题,看了你的代码,有几个关键问题需要修正:
问题1:缺少实际发送邮件的核心调用
你只定义了邮件传输器(transporter)和邮件配置(mailOptions),但没有触发发送操作。这就是为什么控制台能输出Message sent:,但邮件根本没发出去的核心原因——代码只是定义了参数,却没执行发送函数。
问题2:SMTP配置参数错误
Outlook的SMTP端口587使用的是STARTTLS协议,对应的secure参数应该设置为false。secure: true是给465端口(SSL直连)用的,用在587端口会导致连接失败。
问题3:文本换行符错误
你在text内容里写的/n是无效的换行符,应该改成\n才能让邮件内容正确换行。
修正后的完整代码
'use strict'; const nodemailer = require('nodemailer'); async function sendMail() { try { // 修正SMTP配置 let transporter = nodemailer.createTransport({ host: 'smtp-mail.outlook.com', port: 587, secure: false, // 587端口必须设为false requireTLS: true, // 显式要求STARTTLS,确保连接加密 auth: { user: 'yyyy@outlook.com', pass: 'zzzzz' } }); // 修正换行符 let mailOptions = { from: 'yyyy@outlook.com', to: 'xxxxx@in.ibm.com, xxxxx@gmail.com', subject: 'wah wah wah wah', text: 'ho ho ho ho ho ho ho ho\n lo lo lo lo lo lo lo lo lo lo lo lo lo' }; // 实际触发发送操作,并处理结果 let info = await transporter.sendMail(mailOptions); console.log('Message sent: %s', info.messageId); } catch (error) { // 捕获并打印错误,方便排查问题 console.error('Error occurred:', error); } } // 调用发送函数 sendMail();
额外提示
- 如果你用的是Outlook.com的个人邮箱,确保密码是正确的;如果开启了两步验证,需要使用应用密码代替普通登录密码。
- 加上
requireTLS: true可以强制启用STARTTLS,避免连接被明文传输。 - 用async/await和try/catch包裹发送逻辑,能更好地处理异步操作和捕获错误,方便你定位问题(比如认证失败、网络超时等)。
内容的提问来源于stack exchange,提问作者B R Pawan Kumar Iyengar
相关产品推荐
相关产品推荐

