SendGrid引发“将内容复制到流时出错”

时间:2019-01-09 10:12:51

标签: c# sendgrid asp.net-core-2.1

我正在Visual Studio 2017中创建Core 2.1解决方案,在这里我通过Sendgrid发送电子邮件。尝试通过SendGrid发送电子邮件时,出现以下错误:

  

在处理请求时发生未处理的异常。

     

IOException:服务器返回了无效或无法识别的响应。   System.Net.Http.HttpConnection.FillAsync()HttpRequestException:错误   将内容复制到流中时。

     

System.Net.Http.HttpContent.LoadIntoBufferAsyncCore(任务   serializeToStreamTask,MemoryStream tempBuffer)

这是我的代码的样子。我在参数中输入以下内容:

收件人:包含“ ****@gmail.com”的列表

主题:“您好”

正文:通过Heml生成的HTML。它可以在在线编辑器中编译而没有问题。

private async Task<bool> SendAsync(List<string> recipients, string subject, string body)
{
    var client = new SendGridClient(this.configuration["Sendgrid:ApiKey"]);  
    var from = new EmailAddress( 
                       this.configuration["Administration:MainEmailAddress"],
                       this.configuration["Administration:MainEmailName"]);  
    var tos = await GetRecipientsForEnvironment(recipients);  
    var message = MailHelper.CreateSingleEmailToMultipleRecipients(
                                                          from, 
                                                          tos, 
                                                          subject, 
                                                          "", 
                                                          body, 
                                                          false);  
    var response = await client.SendEmailAsync(message);  
    return response.StatusCode == HttpStatusCode.Accepted;
}

此错误的原因是什么?

2 个答案:

答案 0 :(得分:3)

事实证明,Sendgrid中存在一个已知的错误。如果输入的html内容很大,则不会发送正确的错误消息。相反,将显示此错误。就我而言,找不到我的apiKey,因此我应该收到一条Unauthorized错误消息。当我将html更改为更小的HTML时,这给了我正确的错误。

详细了解问题here

答案 1 :(得分:3)

我遇到了同样的问题,但就我而言,这是因为电子邮件配额已过期(我正在使用免费版本进行测试): enter image description here

库版本9.21.0

在提到的主题上 https://github.com/sendgrid/sendgrid-csharp/issues/648,有些人通过了wrong apiKey,而其他人则是exceeding the HTML size

如上面的线程所述,在解释错误时,这显然是sendgrid库中的错误。

因此,除了上述问题(传递了错误的apiKey,超出了HTML大小),返回“将内容复制到流时出错” 隐藏了其他问题问题(例如我的情况:quota expired)。