首页 > 解决方案 > 有时使用 SMTP 发送电子邮件失败 [现有连接被远程主机强行关闭。]

问题描述

当我尝试使用此配置发送电子邮件时,我遇到了特定电子邮件配置的问题我收到此错误

InnerException:无法从传输连接读取数据:现有连接被远程主机强制关闭。资源

我并不总是收到此错误,有时会发送电子邮件,有时会收到上述错误。

但是,如果我尝试使用此配置从本地主机发送电子邮件,它可以正常工作,但在生产(云服务器)中并不总是有效。

编码:

SmtpClient smtpClient = new SmtpClient()
{
    Host = settings.SMTPServerIP,
    Port = settings.SMTPPort.Value,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(settings.SMTPLoginUserName, settings.SMTPLoginPassword),
    EnableSsl = settings.EnableSSL.HasValue ? settings.EnableSSL.Value : false
};

smtpClient.Timeout = 300000;
mail = new MailMessage { From = new MailAddress(settings.SMTPLoginUserID, settings.SMTPLoginUserID)
, Subject = "test", Body = "test", IsBodyHtml = true };
mail.To.Add(em);
mail.Headers.Add("Message-Id", "<" + MessageId + ">");
smtpClient.SendAsync(mail,null);
smtpClient.SendCompleted += delegate(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
    if (e.Error != null)
    {
        success = false;
    }
    if (e.Error != null)
    {
        insertExceptionLogToCCemails(pClientId, "Email status (error)(async):" + (e.Error == null ? "" : (e.Error.Message)) + " stack:" + (e.Error.StackTrace == null ? "" : e.Error.StackTrace) + " InnerException " + (e.Error.InnerException == null ? "" : e.Error.InnerException.Message) + " source:" + (e.Error.Source == null ? "" : e.Error.Source) + " HResult " + (e.Error.HResult == null ? "" : e.Error.HResult.ToString()) + " TargetSite " + (e.Error.TargetSite == null ? "" : e.Error.TargetSite.ToString()) + " HelpLink " + (e.Error.HelpLink == null ? "" : e.Error.HelpLink.ToString()));
    }
    else
    {
        insertExceptionLogToCCemails(pClientId, "Email status (error)(async):" );
    }
};

标签: c#asp.net-mvcsmtpsmtpclient

解决方案


推荐阅读