使用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发送邮件
Azure AD应用配置
- 根据代码类型选择「公共客户端」或「机密客户端」类型
- 添加API权限:选择「Office 365 Exchange Online」下的
SMTP.Send权限(委托/应用权限,应用权限需管理员同意) - 机密客户端需生成客户端密钥,公共客户端需配置重定向URI
获取OAuth2访问令牌
- 委托权限:使用授权码流获取令牌(不推荐密码流,仅用于测试)
- 应用权限:使用客户端凭据流获取令牌
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服务:
Azure AD应用配置
- 添加API权限:选择「Microsoft Graph」下的
Mail.Send权限(委托/应用权限,应用权限需管理员同意)
- 添加API权限:选择「Microsoft Graph」下的
获取访问令牌
- 委托权限:使用授权码流
- 应用权限:使用客户端凭据流
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
相关产品推荐
相关产品推荐

