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

调用SendGrid API发送邮件无返回结果,请求排查问题

问题分析与修正方案

核心代码错误

你的代码仅完成了创建邮件对象的步骤,完全没有调用SendGrid的发送API,这就是请求未离开本地、无返回结果的根本原因:

  • 代码中创建了SendGridClient和邮件对象,但缺少关键的发送操作:
    • 若保留async,需添加await client.SendEmailAsync(output);
    • 按要求移除async,则改用同步调用client.SendEmailAsync(output).GetAwaiter().GetResult();

发件地址验证问题

即便补上发送代码,noreply@noreply.biz这个未验证的发件地址也会导致SendGrid拒绝请求:

  • SendGrid要求发件地址必须是已验证的域名或单个邮箱,未验证地址会被系统拦截,需先在SendGrid后台完成域名/邮箱验证。

其他优化点

  • 异常处理仅设置ret=false,未记录异常详情,建议添加日志输出(如Console.WriteLine(ex.ToString());),方便排查问题。
  • 配置构建逻辑可抽离到方法外部,避免每次调用重复构建,提升性能。

修正后的示例代码(移除async版本)

public bool SendEmail(string To, string From, string Subject, string Body)
{
    bool ret = true;
    try
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json");

        var configuration = builder.Build();
        var apiKey = configuration.GetValue<string>("Communications:SendGridApiKey");

        var client = new SendGridClient(apiKey);
        var message = MailHelper.CreateSingleEmail(new EmailAddress(From), new EmailAddress(To), Subject, Body, Body);
        // 新增发送调用(同步版本)
        var response = client.SendEmailAsync(message).GetAwaiter().GetResult();
        // 检查响应状态,判断是否发送成功
        if (!response.IsSuccessStatusCode)
        {
            ret = false;
            var errorMsg = response.Body.ReadAsStringAsync().GetAwaiter().GetResult();
            Console.WriteLine(errorMsg);
        }
    }
    catch (Exception ex)
    {
        ret = false;
        // 记录异常信息
        Console.WriteLine(ex.ToString());
    }
    return ret;
}

内容的提问来源于stack exchange,提问作者Wallace B. McClure

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:36:02