microsoft 365 企业邮箱,在nodejs中用sendmail发邮件,怎么配置?

microsoft 365 企业邮箱,在nodejs中用sendmail发邮件,怎么配置?

在Node.js中使用sendmail发送邮件,通常指的是使用某些库或模块来模拟sendmail命令行工具的行为。由于你提到了Microsoft 365企业邮箱,这意味着你可能需要使用SMTP(简单邮件传输协议)通过Microsoft的服务器发送电子邮件。

下面将介绍如何在Node.js中配置和使用一个流行的邮件发送库—nodemailer—来通过Microsoft 365企业邮箱发送邮件。nodemailer是一个简单易用的Node.js邮件发送模块。

首先,确保你已经安装了nodemailer模块。如果没有,可以通过以下命令进行安装:

npm install nodemailer

然后,你可以按照以下方式配置nodemailer以使用Microsoft 365的SMTP服务:

const nodemailer = require('nodemailer');

// 创建SMTP客户端配置
let transporter = nodemailer.createTransport({
    host: "smtp.office365.com", // Microsoft 365 SMTP服务器的主机名
    port: 587, // 端口号,对于TLS通常是587
    secure: false, // 如果端口是465,则需要设置为true,对于其他端口如587则设为false
    auth: {
        user: "[email protected]", // 你的Microsoft 365邮箱地址
        pass: "your-password" // 你的邮箱密码或者是应用程序专用密码
    },
    tls: {
        ciphers: 'SSLv3' // 强制使用特定的加密方法
    }
});

// 设置邮件内容
let mailOptions = {
    from: '"Sender Name" <[email protected]>', // 寄件人地址
    to: "[email protected]", // 收件人列表,逗号分隔
    subject: "Hello ✔", // 主题行
    text: "Hello world?", // 纯文本正文
    html: "<b>Hello world?</b>" // HTML正文
};

// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
    console.log('Message sent: %s', info.messageId);
});

请记得把上述代码中的[email protected]your-password替换成你的实际Microsoft 365企业邮箱账号和密码。如果启用了两步验证,可能需要生成并使用一个应用程序专用密码而不是常规密码。

此外,请注意Microsoft可能会要求您通过OAuth 2.0来进行身份验证,尤其是如果您在一个自动化的系统中或有大量邮件发送需求时。这种情况下,配置会稍微复杂一点,您需要注册一个应用程序,在Azure AD中获得必要的凭据,并使用库(例如nodemailer-oauth2)来支持OAuth 2.0认证。

以上是使用nodemailer和SMTP发送邮件的基础配置。如果你想用纯sendmail命令,那通常是在Linux环境中直接调用系统的sendmail程序,但它不涉及Microsoft 365的SMTP服务器。

"Invalid login: 535 5.7.139 Authentication unsuccessful, SmtpClientAuthentication is disabled for the Tenant. Visit https://aka.ms/smtp_auth_disabled for more information. [BYAPR06CA0008.namprd06.prod.outlook.com 2024-04-23T03:13:36.232Z 08DC62C65676F8F0]"

错误信息 "Invalid login: 535 5.7.139 Authentication unsuccessful, SmtpClientAuthentication is disabled for the Tenant" 指出SMTP客户端身份验证在您的租户(Tenant)上已被禁用。这可能是因为您的组织策略或安全设置。

要解决此问题,您需要拥有管理员权限来开启Microsoft 365管理中心的SMTP身份验证。以下是开启SMTP客户端身份验证的步骤:

  1. 登录到Microsoft 365管理中心。
  2. 转到“管理员”部分。
  3. 在管理中心,找到“Exchange”并点击进入。
  4. 在Exchange管理中心,选择“邮件流”。
  5. 点击“接收连接器”选项卡。
  6. 找到用于SMTP客户端连接的接收连接器,点击编辑。
  7. 在弹出的窗口中,查看“安全性”部分,并确保启用了“基本身份验证”。
  8. 如果“基本身份验证”未被启用,您需要开启它,并保存更改。

另外一种情况是整个租户的SMTP身份验证被禁用。您可能还需检查专门针对SMTP客户端身份验证的租户级别策略。这通常是在 PowerShell 中使用 Exchange Online PowerShell 模块设置的。

以下是一个示例 PowerShell 命令来进行检查和更新设置:

# 首先登录到您的Exchange Online PowerShell
Connect-ExchangeOnline -UserPrincipalName <你的管理员账号> -ShowProgress $true

# 查看当前SMTP身份验证状态
Get-TransportConfig | Format-List SmtpClientAuthenticationDisabled

# 如果是禁用状态,则使用以下命令启用SMTP身份验证
Set-TransportConfig -SmtpClientAuthenticationDisabled $false

# 最后,断开与Exchange Online的连接
Disconnect-ExchangeOnline -Confirm:$false

请注意,在执行这些操作之前,确保您有足够的权限,并且已经评估了使SMTP身份验证可用所涉及的安全风险。有时候,基于安全原因,组织可能会故意禁用SMTP身份验证。

如果您在尝试修复此问题时遇到困难,建议联系您的 IT 管理员或者 Microsoft 支持寻求帮助。