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

.NET 7 Asp.Net Core发送邮件遇IOException连接关闭问题排查

.NET 7 Asp.Net Core 邮件发送异常排查与解决

问题概述

基于.NET 7的Asp.Net Core Web应用实现邮件发送功能时,调用代码出现以下错误:

Encoutering IOException: Unable to read data from the transport connection: The connection was closed.

发送邮件代码

第一段代码

public bool SendMail(string name, string email, string subject, string body)
{
    ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    System.Net.ServicePointManager.SecurityProtocol = System.Net.ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    MailMessage message = new MailMessage();
    SmtpClient smtpClient = new SmtpClient();
    message.From = new MailAddress("sender@example.com");
    message.To.Add("recipient@example.com");
    message.Subject = "Contact from customer: "+name;
    message.IsBodyHtml = true;
    message.Body = "<p>" + "Name: " + name + "</p>" + "<p>" + "Email: " + email + "</p>" + "<p>" + "subject: " + subject + "</p>" + "<p>" + "message: " + body + "</p>";
    smtpClient.Port = 465;
    smtpClient.Host = "mydomain.com";
    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = new NetworkCredential("xxxx@example.com", "password");
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtpClient.Send(message);
    return true;
}

第二段代码

public bool SendMail(string car, string name, string email, string phone, string service_type, string pickup_date, string pickup_hour, string pickup_minute, string pickup_AM_PM, string pickup_location, string pickup_destination)
{
    
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
        MailMessage message = new MailMessage();
        SmtpClient smtpClient = new SmtpClient();
        message.From = new MailAddress("sender@example.com");
        message.To.Add("recipient@example.com");
        message.Subject = "Request to book: " + car + " from: " + name;
        message.IsBodyHtml = true;
        message.Body = "<p>" + "Send Date: " + DateTime.Now + "</p>" + "<p>" + "Name: " + name + "</p>" + "<p>" + "Email: " + email + "</p>" + "<p>" + "phone: " + phone + "</p>" + "<p>" + "Servie required: " + service_type + "</p>" + "<p>" + "Pickup date: " + pickup_date + "</p>" + "<p>" + "Pickup time: " + pickup_hour + ":" + pickup_minute + " " + pickup_AM_PM + "</p>" + "<p>" + "Pickup location: " + pickup_location + "</p>" + "<p>" + "Destination: " + pickup_destination + "</p>";
        smtpClient.Port = 465;
        smtpClient.Host = "mydomain.com";
        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = new NetworkCredential("xxxx@example.com", "password");
        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtpClient.Send(message);
        return true;
}

排查细节

  • 确认服务器信息和凭据无误;
  • 本地机器及InterServer Plesk生产环境部署后均无法运行;
  • 更换多种邮件服务商无效(最初Outlook可用,现已失效);
  • 用相同设置和凭据通过外部SMTP测试工具可成功发送邮件;
  • 尝试过主流解决方案(如改用587端口),但主机要求必须用465,且测试工具用587也失败,故方案无效。

最终解决

本地机器问题为防火墙拦截邮件发送请求,生产环境问题为凭据存在错误,目前均已修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:25:10