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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:45:39