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

调用SendGrid API添加附件后返回0但邮件已送达,咨询原因

问题分析与解决方案

现象总结

使用SendGrid .NET SDK发送邮件时:

  • 不带附件:接口返回Accepted(符合官方文档的202状态码)
  • 带附件:response.StatusCode.ToString()输出0,但邮件及附件均成功送达

可能原因及排查方向

1. SDK版本存在响应解析Bug

旧版本的SendGrid .NET SDK在处理带大附件的请求响应时,可能存在状态码枚举映射异常。建议升级到最新稳定版的SendGrid NuGet包,新版本通常会修复这类解析问题。

2. HttpStatusCode枚举ToString()的显示问题

HttpStatusCode是枚举类型,当SDK内部处理响应时如果出现未正确映射的情况,ToString()可能返回枚举的数值(0)而非名称。可以尝试直接输出状态码的数值:

SendresponseToText(((int)response.StatusCode).ToString());

如果输出是202,说明实际状态码是正确的Accepted,只是ToString()的显示异常,不影响业务逻辑。

3. 大附件触发的响应处理异常

如果附件体积较大,SDK在读取响应流时可能出现部分异常,但SendGrid服务器已经成功接收请求并发送邮件。可以尝试:

  • 减小附件体积测试,看是否还会出现0的情况
  • 打印完整响应的Body和Headers,确认SendGrid实际返回的内容:
var body = await response.Body.ReadAsStringAsync();
var headers = string.Join("\n", response.Headers.Select(h => $"{h.Key}: {string.Join(", ", h.Value)}"));
SendresponseToText($"StatusCode: {(int)response.StatusCode}, Body: {body}, Headers: {headers}");

4. 异步执行上下文问题

确保await client.SendEmailAsync(msg)是在正确的异步上下文中执行,避免同步阻塞(比如在同步方法中使用.Wait()或.Result())导致的状态对象异常。

临时处理方案

如果只是日志显示问题,不影响邮件发送,可以直接记录状态码的数值而非字符串,确保日志能正确反映实际响应状态:

var statusCodeValue = (int)response.StatusCode;
var statusMessage = statusCodeValue == 202 ? "Accepted" : statusCodeValue.ToString();
SendresponseToText(statusMessage);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:22:51