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

如何在C#中使用OAuth2认证SMTP连接发送Office365邮件?

关于SMTP+OAuth2发送Office365邮件的方案验证与替代方案

当前方案的问题

你当前使用的scopes: https://graph.microsoft.com/.default是针对Microsoft Graph API的权限范围,不适用于SMTP+OAuth2场景。SMTP协议的OAuth2认证需要专门的权限范围,直接用这个令牌无法通过SMTP服务器的认证。

调整后可行的SMTP+OAuth2方案

如果要继续用SMTP+OAuth2发送邮件,需要做以下调整:

  • 权限配置:在Azure AD应用注册中,添加应用权限:SMTP.Send(属于Microsoft Exchange Online权限组),并完成管理员同意。
  • 令牌获取:将scopes修改为https://outlook.office365.com/SMTP.Send,用MSal库重新获取令牌。authority保持https://login.microsoftonline.com/TenantId不变,因为是租户级别的应用权限。
  • SMTP服务器配置:连接Office365的SMTP服务器smtp.office365.com,端口587(STARTTLS),认证方式选择OAuth2,使用获取到的令牌作为凭据。

替代方案:使用Microsoft Graph API发送邮件

如果不想调整SMTP相关配置,直接用已启用的Microsoft Graph权限,可调用Graph API的邮件发送接口完成操作,步骤如下:

  • 确保应用已添加应用权限:Mail.Send(Microsoft Graph下的权限),并完成管理员同意。
  • 用现有的https://graph.microsoft.com/.default scope获取令牌,然后调用Graph API:
    POST https://graph.microsoft.com/v1.0/users/{userId}/sendMail
    Content-Type: application/json
    
    {
      "message": {
        "subject": "Test Email",
        "body": {
          "contentType": "Text",
          "content": "This is a test email sent via Graph API."
        },
        "toRecipients": [
          {
            "emailAddress": {
              "address": "recipient@example.com"
            }
          }
        ]
      },
      "saveToSentItems": true
    }
    
    这种方式无需处理SMTP连接,直接通过REST API完成邮件发送,更适配Microsoft 365的现代集成逻辑。

内容的提问来源于stack exchange,提问作者Simba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:45:58