.NET 4.8 VB项目使用Gmail SMTP发邮件报错排查求助
Gmail SMTP发送邮件报错的账户设置方案
问题描述
在Windows 11系统下,基于.NET 4.8框架使用VB语言开发的项目中,配置Gmail SMTP发送邮件时出现错误:Failure sending mail.,内部异常信息为Unable to read data from the transport connection: net_io_connectionclosed.。
尝试更换端口后仍报错:
- 端口465:同样触发
Failure sending mail.,内部异常为Unable to read data from the transport connection: net_io_connectionclosed. - 端口25:报错
Failure sending mail.,内部异常为Unable to connect to the remote server
已知另一个开启了两步验证并使用应用密码的Gmail账户可以正常发送邮件,需调整当前账户的设置。
已尝试的代码
Imports System.Net Imports System.Net.Mail Public Class Form1 Public Shared Function ServerCertificateValidationCallback(ByVal sender As Object, ByVal cert As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As Net.Security.SslPolicyErrors) As Boolean Return True End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12 Dim Mail As New System.Net.Mail.MailMessage Dim smtp As New System.Net.Mail.SmtpClient Mail.From = New MailAddress("aravind@gmail.com", "Aravind") Mail.To.Add("aravind1@gmail.com") Mail.IsBodyHtml = True Mail.Subject = "Hai Testing Mail" smtp = New SmtpClient("smtp.gmail.com", "587") smtp.EnableSsl = True smtp.DeliveryMethod = SmtpDeliveryMethod.Network smtp.UseDefaultCredentials = False smtp.Credentials = New System.Net.NetworkCredential("aravind@gmail.com", "xxxxxxxxxxx") Dim userstate As Object = Mail System.Net.ServicePointManager.ServerCertificateValidationCallback = AddressOf ServerCertificateValidationCallback smtp.Send(Mail) Catch ex As Exception MessageBox.Show(ex.InnerException.ToString) MessageBox.Show(ex.Message.ToString) End Try End Sub End Class
需要修改的Gmail账户设置
1. 启用两步验证并创建应用密码(推荐)
这是Google官方推荐的安全方案,也是你已验证可行的方式:
- 登录当前Gmail账户,进入账户安全设置页面
- 找到「两步验证」选项,按照页面指引完成开启流程
- 开启两步验证后,在安全设置中找到「应用密码」选项,创建一个专属应用密码(应用类型选「邮件」,设备选「其他」,自定义名称比如「VB项目邮件」)
- 将代码中
smtp.Credentials的密码替换为这个新生成的应用密码,原账户密码无法再用于SMTP验证
2. 临时启用「不太安全的应用访问」(不推荐)
若暂时不想开启两步验证,可启用此选项,但会降低账户安全性,且Google可能逐步淘汰该功能:
- 登录Gmail账户,进入账户安全设置页面
- 搜索「不太安全的应用访问」,开启该选项即可
代码优化建议
- 移除跳过SSL证书验证的
ServerCertificateValidationCallback逻辑,这会带来安全风险。.NET 4.8默认支持TLS 1.2,可将协议设置简化为:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
- 保持使用端口587,这是Gmail SMTP的标准端口,无需更换到465或25(25端口大概率会被网络运营商封禁)
内容的提问来源于stack exchange,提问作者Aravind Aravind
相关产品推荐
相关产品推荐

