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,而不是 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。




