11 KiB
title, weight, description, keywords
| title | weight | description | keywords | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Microsoft 365 | 16 | 在 RustDesk Server Pro 中配置 SMTP OAuth2(Microsoft 365),通过 Exchange Online 发送邮件。 |
|
使用本指南为 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 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 中配置
- 登录 Azure 门户。
- 搜索并选择 App registrations。
- 在左侧菜单中选择 App registrations,然后点击 New registration。

- 创建应用注册。

- 记录
Directory (tenant) ID和Application (client) ID,稍后要填写到 RustDesk 中。
- 打开 Certificates & secrets,创建一个新的 client secret。

- 立即复制 client secret 的
Value。Microsoft 只显示一次该值。
- 打开 API permissions,添加 Microsoft 365 Exchange Online 的 SMTP 应用权限。
- 选择 Add a permission。
- 选择 APIs my organization uses,搜索 Office 365 Exchange Online。
- 选择 Application permissions。
- 选择 SMTP.SendAsApp 并保存更改。

- 为刚刚添加的权限授予管理员同意。

2. 在 PowerShell 中配置
这一部分连接 Exchange Online,创建 service principal,准备发信邮箱并授予权限。
Install-Module -Name ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline
如需指定管理员账号,也可以使用:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
- 在 Microsoft Entra 的 Enterprise applications 中找到该应用,记录它的
Object ID。后面创建 Exchange Online service principal 时会用到这个值。
{{% notice note %}}
这里使用的 OBJECT_ID 必须来自该应用在 Enterprise applications 中的 object ID,而不是 App registrations 概览页里的 object ID。
{{% /notice %}}
- 运行以下命令,为该应用注册创建 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。

- 确认 Exchange 已创建该 service principal,并记录它的
Identity值,后面会用到。
Get-ServicePrincipal | Format-Table DisplayName,AppId,ObjectId,Identity
后面两个权限命令中的 <SERVICE_PRINCIPAL_ID>,就使用这里返回的 Identity 值。
- 如果发信邮箱还不存在,可以先创建一个 shared mailbox,例如:
New-Mailbox -Shared -Name "No Reply" -Alias no-reply -DisplayName "No Reply" -PrimarySmtpAddress no-reply@contoso.com
- 检查租户和发信邮箱是否启用了
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 defaults 时,Exchange Online 中的 SMTP AUTH 会被禁用。
命令详情可参考 Microsoft Learn: Enable or disable authenticated client SMTP submission (SMTP AUTH) in Exchange Online。
- 为 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。

- 再授予同一个 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) IDApplication (client) ID- client secret 的
Value - 一个已确认存在且已对
Mail Account所用邮箱授予FullAccess和SendAs的 Exchange Online service principal
RustDesk 不需要填写 Exchange service principal 的 Identity,但在测试发信前,上述权限步骤必须已经完成。
-
在 RustDesk Web 控制台 中,进入 Settings -> SMTP。
-
启用 OAuth2,并选择 Microsoft 365 作为提供商。
-
填写以下字段:
FromMail AccountOAuth2 Tenant IDOAuth2 Client IDOAuth2 Client secret
如果测试邮件仍失败,请回到上面的 PowerShell 部分,重新检查 Exchange Online service principal、Authenticated SMTP 设置,以及 Mail Account 对应邮箱的权限配置。
参考
- Microsoft Learn: Authenticate an IMAP, POP or SMTP connection using OAuth。用于 Exchange Online 应用权限和 service principal 相关步骤。
- Microsoft Learn: Enable or disable authenticated client SMTP submission (SMTP AUTH) in Exchange Online。用于检查和启用
Authenticated SMTP。 - Microsoft Learn: Create shared mailboxes in the Exchange admin center。用于创建 shared mailbox。




