Files
doc.rustdesk.com/content/self-host/rustdesk-server-pro/smtp/microsoft-365/_index.zh-cn.md
fufesou e0821b420a fix: broken links
Signed-off-by: fufesou <linlong1266@gmail.com>
2026-04-18 12:00:27 +08:00

11 KiB
Raw Blame History

title, weight, description, keywords
title weight description keywords
Microsoft 365 16 在 RustDesk Server Pro 中配置 SMTP OAuth2Microsoft 365通过 Exchange Online 发送邮件。
rustdesk smtp oauth2
rustdesk smtp microsoft 365
rustdesk smtp m365
rustdesk smtp oauth2 microsoft 365
rustdesk smtp oauth2 m365
rustdesk server pro smtp oauth2
rustdesk server pro microsoft 365
rustdesk server pro m365
rustdesk server pro smtp oauth2 microsoft 365
rustdesk server pro smtp oauth2 m365

使用本指南为 RustDesk Server Pro 配置通过 Microsoft 365 Exchange Online 发送 OAuth2 邮件。

该配置适用于邀请邮件、登录验证邮件和连接告警通知。

通用 SMTP 配置可参考 SMTP

RustDesk Pro 中要填写哪些值?

RustDesk Pro 字段 填写内容
From 出站邮件中显示的发件人地址。
Mail Account RustDesk 用作 XOAUTH2 SMTP 用户名的邮箱地址。
OAuth2 Tenant ID 应用概览中的 Directory (tenant) ID
OAuth2 Client ID 应用概览中的 Application (client) ID
OAuth2 Client secret Certificates & secrets 中创建的 secret Value

下图可帮助你直接对应 RustDesk 中这些字段的位置:

配置

开始前,请先确认你已具备:

  • RustDesk Server Pro 1.8.1 或更高版本
  • 一个现有的,或准备创建用于发送邮件的 Microsoft 365 邮箱,例如 no-reply@contoso.com
  • 一个可在 Microsoft Entra 中授予管理员同意、并管理 Exchange Online service principal 的 Microsoft 365 管理员账号

本配置分为三个部分:

  • 在 Azure 中完成应用注册、client secret、API 权限和管理员同意
  • 在 PowerShell 中完成 Exchange Online service principal、邮箱和权限配置
  • 在 RustDesk 中填写 SMTP OAuth2 配置并发送测试邮件

1. 在 Azure 中配置

  1. 登录 Azure 门户
  2. 搜索并选择 App registrations
  3. 在左侧菜单中选择 App registrations,然后点击 New registration
  4. 创建应用注册。
  5. 记录 Directory (tenant) IDApplication (client) ID,稍后要填写到 RustDesk 中。
  6. 打开 Certificates & secrets,创建一个新的 client secret。
  7. 立即复制 client secret 的 Value。Microsoft 只显示一次该值。
  8. 打开 API permissions,添加 Microsoft 365 Exchange Online 的 SMTP 应用权限。
  9. 选择 Add a permission
  10. 选择 APIs my organization uses,搜索 Office 365 Exchange Online
  11. 选择 Application permissions
  12. 选择 SMTP.SendAsApp 并保存更改。
  13. 为刚刚添加的权限授予管理员同意。

2. 在 PowerShell 中配置

这一部分连接 Exchange Online创建 service principal准备发信邮箱并授予权限。

  1. 以本地管理员权限打开 PowerShell。
  2. 安装 Exchange Online 模块,并使用租户管理员账号连接 Exchange Online。
Install-Module -Name ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline

如需指定管理员账号,也可以使用:

Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
  1. 在 Microsoft Entra 的 Enterprise applications 中找到该应用,记录它的 Object ID。后面创建 Exchange Online service principal 时会用到这个值。

{{% notice note %}} 这里使用的 OBJECT_ID 必须来自该应用在 Enterprise applications 中的 object ID而不是 App registrations 概览页里的 object ID。 {{% /notice %}}

  1. 运行以下命令,为该应用注册创建 Exchange Online service principal。Microsoft 官方文档将这一步称为 “Registration of a Microsoft Entra application's service principal in Exchange Online”。
New-ServicePrincipal -AppId <APPLICATION_ID> -ObjectId <OBJECT_ID>

如果 Exchange 连接成功但此命令仍失败,请检查当前管理员账号是否有权限管理 Exchange Online 的 service principal。

  1. 确认 Exchange 已创建该 service principal并记录它的 Identity 值,后面会用到。
Get-ServicePrincipal | Format-Table DisplayName,AppId,ObjectId,Identity

后面两个权限命令中的 <SERVICE_PRINCIPAL_ID>,就使用这里返回的 Identity 值。

  1. 如果发信邮箱还不存在,可以先创建一个 shared mailbox例如
New-Mailbox -Shared -Name "No Reply" -Alias no-reply -DisplayName "No Reply" -PrimarySmtpAddress no-reply@contoso.com

如果你已经有现成的发信邮箱,可以跳过这一步。

  1. 检查租户和发信邮箱是否启用了 Authenticated SMTP
Get-TransportConfig | Format-List SmtpClientAuthenticationDisabled
Get-CASMailbox -Identity "no-reply@contoso.com" | Format-List SmtpClientAuthenticationDisabled

如果这一项没有启用,测试邮件时可能遇到以下错误:

permanent error (535): 5.7.139 Authentication unsuccessful, SmtpClientAuthentication is disabled for the Tenant. Visit https://aka.ms/smtp_auth_disabled for more information.

对邮箱级设置,可按需执行:

Set-CASMailbox -Identity "no-reply@contoso.com" -SmtpClientAuthenticationDisabled $false

如果租户级返回 True,再根据组织策略决定是否执行:

Set-TransportConfig -SmtpClientAuthenticationDisabled $false

如果上面的租户级和邮箱级设置看起来都正确,但仍持续出现同一个 535 5.7.139 错误,也请检查租户是否启用了 Microsoft Entra Security defaults。Microsoft Learn 明确说明,启用 Security defaultsExchange Online 中的 SMTP AUTH 会被禁用。

命令详情可参考 Microsoft Learn: Enable or disable authenticated client SMTP submission (SMTP AUTH) in Exchange Online

  1. 为 RustDesk 将要用来发信的邮箱授予该 Exchange service principal FullAccess 权限。
Add-MailboxPermission -Identity "no-reply@contoso.com" -User <SERVICE_PRINCIPAL_ID> -AccessRights FullAccess

这里请使用你计划在 RustDesk 的 Mail Account 中填写的邮箱。

如果这个命令返回类似错误:

Write-ErrorMessage : ||The operation couldn't be performed because object 'no-reply@xxx.com' couldn't be found on 'xxx.xxx.PROD.OUTLOOK.COM'.

通常表示 -Identity 指定的值没有在 Exchange Online 中解析到实际邮箱对象。

先确认该邮箱是否真实存在于 Exchange Online

Get-EXOMailbox -Identity "no-reply@xxx.com" | Format-List DisplayName,PrimarySmtpAddress,RecipientTypeDetails

如果查询不到结果,请先创建或确认这个邮箱。对于 no-reply 一类发信地址,可以创建 shared mailbox例如

New-Mailbox -Shared -Name "No Reply" -Alias no-reply -DisplayName "No Reply" -PrimarySmtpAddress no-reply@xxx.com

如果邮箱已经存在,请确认你在 Add-MailboxPermission -Identity ... 中使用的是该邮箱的实际地址、别名或其他可解析的 mailbox identity。

  1. 再授予同一个 service principal SendAs 权限。
Add-RecipientPermission -Identity "no-reply@contoso.com" -Trustee <SERVICE_PRINCIPAL_ID> -AccessRights SendAs -Confirm:$false

这一步同样是 Microsoft 官方 app-only SMTP 配置的一部分。

3. 在 RustDesk 中配置

到这一步,你应已经准备好:

  • 准备用于 From 的发件人地址
  • 准备用于 Mail Account 的邮箱地址
  • Directory (tenant) ID
  • Application (client) ID
  • client secret 的 Value
  • 一个已确认存在且已对 Mail Account 所用邮箱授予 FullAccessSendAs 的 Exchange Online service principal

RustDesk 不需要填写 Exchange service principal 的 Identity,但在测试发信前,上述权限步骤必须已经完成。

  1. 在 RustDesk Web 控制台 中,进入 Settings -> SMTP

  2. 启用 OAuth2并选择 Microsoft 365 作为提供商。

  3. 填写以下字段:

    • From
    • Mail Account
    • OAuth2 Tenant ID
    • OAuth2 Client ID
    • OAuth2 Client secret
  4. 点击 Check 保存配置并发送测试邮件。

如果测试邮件仍失败,请回到上面的 PowerShell 部分,重新检查 Exchange Online service principal、Authenticated SMTP 设置,以及 Mail Account 对应邮箱的权限配置。

参考