C#中Button_Click事件发送Gmail邮件报错net_io_connectionclosed
解决Gmail SMTP发送邮件时的
net_io_connectionclosed错误 这个问题我帮不少开发者排查过,核心原因基本都是Gmail SMTP的配置细节没做对,尤其是你用的465端口——它是强制SSL加密的端口,咱们一步步来修复:
最可能的问题:缺少SSL启用设置
465端口要求全程SSL加密,你的代码里没看到EnableSsl = true的配置,这是触发这个错误最常见的原因。Gmail服务器会直接拒绝未加密的连接请求,导致连接被强制关闭。
完整的正确配置步骤
- 强制开启SSL:在初始化
SmtpClient后添加这行代码:client.EnableSsl = true; - 指定Gmail的SMTP服务器:必须设置Host为
smtp.gmail.com,这一步不能省略:client.Host = "smtp.gmail.com"; - 配置正确的凭据:
- 如果你的Gmail账户开启了两步验证,绝对不能用原密码,必须去Google账户设置里生成一个应用专用密码(App Password),用这个密码作为凭据。
- 如果没开两步验证,需要在Google账户的安全设置里开启“允许低安全性应用访问”(注意:这个选项现在默认隐藏,需要去Google账户安全页手动开启)。
凭据配置代码示例:
client.Credentials = new System.Net.NetworkCredential("your-email@gmail.com", "your-app-password-or-account-password"); - 备选方案:改用587端口(STARTTLS)
如果465端口还是有问题,可以试试Gmail支持的587端口(STARTTLS加密),兼容性往往更好,配置如下:client.Port = 587; client.EnableSsl = true; // 同样需要开启SSL
修正后的完整代码示例
protected void Button2_Click(object sender, EventArgs e) { System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); SmtpClient client = new SmtpClient(); // 核心配置修正 client.Host = "smtp.gmail.com"; client.Port = 465; client.EnableSsl = true; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Credentials = new System.Net.NetworkCredential("your-email@gmail.com", "your-app-password"); // 补充邮件内容配置(根据你的需求修改) mail.From = new System.Net.Mail.MailAddress("your-email@gmail.com"); mail.To.Add("recipient@example.com"); mail.Subject = "Test Email"; mail.Body = "This is a test email sent from ASP.NET"; try { client.Send(mail); // 发送成功后的提示或逻辑 Response.Write("Email sent successfully!"); } catch (Exception ex) { // 捕获异常做日志或提示 Response.Write("Error sending email: " + ex.Message); } }
错误原因解释
net_io_connectionclosed本质是你的程序和Gmail SMTP服务器建立连接后,被服务器主动关闭了。常见触发场景:
- 未启用SSL,服务器拒绝未加密连接
- 凭据无效(密码错误或未使用应用专用密码)
- 账户安全设置阻止了第三方应用访问
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

