SendGrid无法从传输连接读取数据:net_io_connectionclosed

时间:2015-11-19 16:09:06

标签: c# .net email sendgrid

我最近因为最近将项目升级到.net 4.5.2而发送了一封通过SendGrid发送电子邮件的例外

  

发送邮件失败。 System.IO.IOException:无法从中读取数据   传输连接:net_io_connectionclosed。在   System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte []缓冲区,   Int32 offset,Int32 read,Boolean readLine)at   System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader   caller,Boolean oneLine)at   System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader   调用者)在System.Net.Mail.CheckCommand.Send(SmtpConnection conn,   字符串和放大器;回应)   System.Net.Mail.MailCommand.Send(SmtpConnection conn,Byte []命令,   MailAddress from,Boolean allowUnicode)at   System.Net.Mail.SmtpTransport.SendMail(MailAddress sender,   MailAddressCollection收件人,String deliveryNotify,布尔值   allowUnicode,SmtpFailedRecipientException&例外)   System.Net.Mail.SmtpClient.Send(MailMessage消息)at   System.Net.Mail.SmtpClient.Send(MailMessage消息)at   SendGridMail.Transport.SMTP.SmtpWrapper.Send(MailMessage mime)at at   SendGridMail.Transport.SMTP.Deliver(ISendGrid消息)at   ReACT.Classes.Business.Helpers.Email.Send(String [] to,String []   toNames,Boolean ccToSender,String [] ccTo,String [] ccToNames,String   subject,String body,Boolean isHtml,String SMTPServer,String   EmailUserName,String EmailPassword,String EmailPort,String   SystemEmailAddress,String SystemEmailName,String& FriendlyException,   字符串和放大器; TechnicalException)

用于使用SendGrid服务通过SMTP发送电子邮件的代码如下 -

            SendGridMail.SendGrid vEmailMessage = SendGridMail.SendGrid.GetInstance(vMailMessage.From, vMailMessage.To.ToArray(), vMailMessage.CC.ToArray(), new MailAddress[0], vMailMessage.Subject, vMailMessage.Body, vMailMessage.Body);

            NetworkCredential vCredentials = new NetworkCredential(this.ApplicationSettings.EmailUserName, this.ApplicationSettings.EmailPassword);
            var vTransport = SMTP.GetInstance(vCredentials);

            //Send email message
            vTransport.Deliver(vEmailMessage);

凭据正确并确认工作正常。这个问题自.net框架升级以来才开始,不幸的是,我们无法降级回目标.net 4

8 个答案:

答案 0 :(得分:11)

对于那些在通过SendGrid发送电子邮件时遇到相同异常的人,事实证明,新的功能是将错误的密码传递给SendGrid API,从而产生AuthenticationFailedException: 535 Authentication failed: Bad username / password

我在下载Wireshark后发现了这一点,发现了&检查SendGrid数据包以查找发送到API的数据在某种情况下是不正确的。然后,SendGrid API返回了一个非常有用的AuthenticationFailedException异常,但是当代码中的try catch块中捕获到此异常时,实际的异常被掩盖并且如前面提到的那样net_io_connectionclosed IOException

我修复了新应用程序中的错误,问题就消失了。如果SendGrid API抛出的实际异常只是try catch块中捕获的异常!

答案 1 :(得分:5)

我有同样的问题。我的用户名错误。我以为这是我为此创建的ApiKey,甚至尝试了带域和不带域的电子邮件。解决方案是 SMTP用户名是“ apikey” ,就像该字符串一样,而不是您的apikey,内部标识符或您提供的“友好”名称。恰好是“ apikey”的6个字母。

答案 2 :(得分:1)

对我们来说 - 这个非描述性错误是由于达到了我们的 sendgrid 电子邮件 API 订阅的发送限制。我建议您先检查您的 sendgrid 帐户,然后再处理网站设置。

答案 3 :(得分:0)

我注意到服务正在发送大量消息并使用azure free account plain中可用的所有25.000 /月消息。 为了解决这个问题,我创建了一个新帐户并修复了服务以发送较少数量的邮件。

答案 4 :(得分:0)

我遇到了同样的错误,但这是因为我在NetworkCredential

中包含了一个域参数

答案 5 :(得分:0)

const string username="apikey";
string pass = "xxxxxxxxxxxxxxxxxxxxx" // login sendgrid.com => create ApiKey
NetworkCredential vCredentials = new NetworkCredential("apikey", pass);

我已遵循本指南 链接:https://sendgrid.com/docs/API_Reference/SMTP_API/integrating_with_the_smtp_api.html

答案 6 :(得分:0)

我遇到了同样的问题,但这与在将我的 SMTP 和 API V3 代码升级到基于密钥的身份验证之前在我的 sendgrid 帐户中启用 2FA 有关。

如果您在执行其他操作之前启用 2FA,则会破坏身份验证。

答案 7 :(得分:0)

在我们的例子中,这是一个网络问题。我们必须启用公司的防火墙,以允许从我们的服务到 SendGrid/Twilio 的 Web 套接字连接,因为我们必须切换到的新 C# 客户端 (SendGridClient) 使用套接字。之前我们使用了使用 SMTP/HTTP 的 C# 通用 MailClient。