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

Graph API SendMail部署后异常:本地正常部署后报204错误

使用Microsoft Graph发送邮件:本地正常但部署后返回204状态码

我按照《SendMail》教程实现了.NET中通过Microsoft Graph发送邮件的功能,本地运行完全正常,但部署后调用接口时返回204状态码。已确认Key Vault配置无问题,所有密钥正确且可访问。核心代码如下:

public async Task<string> SendEmail(string fromAddress, string toAddress, string subject, string content)
{
    try
    {
        string? tenantId = "";
        string clientId = "";
        string clientSecret = "";
        var scopes = new[] { "https://graph.microsoft.com/.default" };
        ClientSecretCredential credential = new(tenantId, clientId, clientSecret, new TokenCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzurePublicCloud });
        GraphServiceClient graphClient = new(credential, scopes);

        Message message = new()
        {
            Subject = subject,
            Body = new ItemBody
            {
                ContentType = BodyType.Text,
                Content = content
            },
            ToRecipients = new List<Recipient>()
            {
                new Recipient
                {
                    EmailAddress = new Microsoft.Graph.EmailAddress
                    {
                        Address = toAddress
                    }
                }
            }
        };

        bool saveToSentItems = true;

        await graphClient.Users[fromAddress]
         .SendMail(message, saveToSentItems)
         .Request()
         .PostAsync();

        return "Email successfully sent.";

    }
    catch (Exception ex)
    {
        this._logger.LogError(ex, "error sending email");
        return null;
    }
}

问题分析与解决方案

1. 澄清204状态码的含义

Microsoft Graph的SendMail API在邮件成功发送时,标准响应就是204 No Content,这是符合REST设计规范的正常结果,并非错误。如果你的部署环境将204判定为“错误”,是对状态码的误解。

2. 若实际邮件未送达(返回204但收件方未收到),按以下方向排查:

  • 权限配置检查:确保应用已授予Mail.Send的应用权限(而非委派权限),且已完成Azure AD管理员同意。本地测试可能使用了不同的权限方式(比如用户凭据),部署后使用客户端密钥流必须用应用权限。
  • 邮箱有效性验证:确认fromAddress是当前Azure AD租户内已验证的用户邮箱,不能使用外部未关联的邮箱。
  • 邮件流排查:测试发送到同租户内的邮箱,排除收件方垃圾邮件过滤的影响;可在Microsoft 365管理中心的邮件流工具中查询投递记录。
  • 网络连通性:检查部署环境的防火墙、代理是否允许访问https://graph.microsoft.com,确保没有出站流量拦截。
  • 增强日志排查:修改代码捕获更详细的Graph API异常信息(如果存在),便于定位问题:
    catch (ServiceException ex)
    {
        _logger.LogError("Graph API请求异常:状态码={StatusCode},请求ID={RequestId},详情={Detail}", 
            ex.StatusCode, ex.ResponseHeaders?["request-id"], ex.Message);
        return null;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:57:25