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

如何通过Azure应用注册实现无交互使用O365邮箱发送邮件

解决方案

核心问题分析

你遇到的403权限错误,本质是Azure应用的权限配置类型错误,且应用未与目标发件邮箱建立授权关联:

  • 服务端无交互场景必须使用应用权限(Application Permissions),而非委托权限(Delegated Permissions);
  • 当前调用尝试代表指定邮箱发送,但应用未获得访问该邮箱的权限。

具体修复步骤

  1. 修正Azure应用权限配置

    • 登录Azure门户,找到该应用的「API权限」页面;
    • 删除现有可能的委托类型Mail.Send权限,添加应用类型的Mail.Send权限(注意区分权限列表里的「Application」标签);
    • 点击「授予管理员同意」(必须由全局/Exchange管理员操作)。
  2. 建立应用与发件邮箱的关联
    如果需要严格使用指定的发件邮箱(而非应用身份发送),需额外配置:

    • 通过Exchange Online PowerShell执行以下命令,给应用授予访问目标邮箱的权限:
      New-ApplicationAccessPolicy -AppId <你的ClientID> -PolicyScopeGroupId <发件邮箱地址> -AccessRight RestrictAccess -Description "Allow app to send mail from specific mailbox"
      

    若允许应用访问所有邮箱,可跳过此步(但遵循最小权限原则不推荐)。

  3. 代码验证(可选:沿用SMTP协议)
    如果你想继续使用SMTP而非Graph API,可通过ClientSecret获取SMTP专用token,示例VB.NET代码:

    Dim tenantId As String = "你的TenantID"
    Dim clientId As String = "你的ClientID"
    Dim clientSecret As String = "你的ClientSecret"
    Dim smtpScope As String = "https://outlook.office365.com/.default"
    
    Dim credentials = New ClientSecretCredential(tenantId, clientId, clientSecret, New TokenCredentialOptions With {.AuthorityHost = AzureAuthorityHosts.AzurePublicCloud})
    Dim token = credentials.GetTokenAsync(New TokenRequestContext({smtpScope})).Result.Token
    
    ' 然后使用SMTP客户端,设置OAuth2认证
    Using smtp As New SmtpClient("smtp.office365.com", 587)
        smtp.EnableSsl = True
        smtp.Credentials = New NetworkCredential("发件邮箱地址", token, "Bearer")
        smtp.Send(mailMessage)
    End Using
    

关键说明

  • 应用权限的Mail.Send授予后,应用拥有发送邮件的权限,但默认需要明确指定允许访问的邮箱(通过Exchange命令);
  • 若继续使用Graph API的Users(fromAddress).SendMail,确保权限已正确配置并完成管理员同意,无需额外代码修改(前提是应用已获得该邮箱的访问权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:50:41