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

使用Office365现代认证发邮件报错求助:租户禁用SmtpClientAuthentication

使用Office 365通过现代认证发送邮件的解决方案及步骤

一、解决报错:SmtpClientAuthentication is disabled for the Tenant

你遇到的错误是因为租户全局禁用了SMTP客户端认证,需先完成以下配置:

1. 全局启用租户SMTP客户端认证

通过Exchange Online PowerShell执行命令:

# 连接Exchange Online
Connect-ExchangeOnline
# 全局开启SMTP客户端认证
Set-TransportConfig -SmtpClientAuthenticationDisabled $false

2. 针对单个邮箱单独启用(全局开启后仍有问题时使用)

如果全局配置后特定邮箱仍无法使用,单独为该邮箱开启:

Set-CASMailbox -Identity "你的邮箱地址" -SmtpClientAuthenticationDisabled $false

二、使用现代认证(OAuth2)发送邮件的正确步骤

方式1:SMTP + OAuth2发送邮件

  1. Azure AD应用配置

    • 根据代码类型选择「公共客户端」或「机密客户端」类型
    • 添加API权限:选择「Office 365 Exchange Online」下的SMTP.Send权限(委托/应用权限,应用权限需管理员同意)
    • 机密客户端需生成客户端密钥,公共客户端需配置重定向URI
  2. 获取OAuth2访问令牌

    • 委托权限:使用授权码流获取令牌(不推荐密码流,仅用于测试)
    • 应用权限:使用客户端凭据流获取令牌
  3. C#代码示例

using System.Net;
using System.Net.Mail;

var smtpClient = new SmtpClient("smtp.office365.com", 587)
{
    EnableSsl = true,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential("你的邮箱地址", "OAuth2访问令牌", "Bearer")
};

var mailMessage = new MailMessage("sender@domain.com", "recipient@domain.com")
{
    Subject = "测试邮件",
    Body = "这是通过现代认证发送的邮件"
};

smtpClient.Send(mailMessage);

方式2:Microsoft Graph API发送邮件(推荐)

Graph API是更符合现代认证规范的方式,无需依赖SMTP服务:

  1. Azure AD应用配置

    • 添加API权限:选择「Microsoft Graph」下的Mail.Send权限(委托/应用权限,应用权限需管理员同意)
  2. 获取访问令牌

    • 委托权限:使用授权码流
    • 应用权限:使用客户端凭据流
  3. C#代码示例

using Microsoft.Graph;
using Azure.Identity;

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "你的租户ID";
var clientId = "你的应用ID";
var clientSecret = "你的应用密钥";

var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(credential, scopes);

var message = new Message
{
    Subject = "测试邮件",
    Body = new ItemBody
    {
        ContentType = BodyType.Text,
        Content = "这是通过Graph API发送的邮件"
    },
    ToRecipients = new List<Recipient>
    {
        new Recipient
        {
            EmailAddress = new EmailAddress { Address = "recipient@domain.com" }
        }
    }
};

await graphClient.Users["sender@domain.com"].SendMail(message, saveToSentItems: true).Request().PostAsync();

注意事项

  • 应用权限需要全局管理员同意后才能生效
  • 生产环境禁止使用密码流获取令牌,优先选择授权码流或客户端凭据流
  • 使用Graph API时无需开启SMTP客户端认证

内容的提问来源于stack exchange,提问作者Mohammed Khaja Najmuddin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:30:49