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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:16