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

VB调用Gmail发邮件失效排查:已用应用密码仍无法解决

VB中SmtpClient.Credentials赋值后仍为Nothing的解决办法

核心问题分析

你遇到的SmtpServer.Credentials始终为Nothing的情况,大概率是因为缺少SMTP服务器核心配置参数,或是.NET框架特定行为导致赋值未生效。以下是具体排查和解决步骤:

1. 必须先配置SMTP服务器的Host和Port

你的代码仅初始化了SmtpClient,但未指定Gmail的SMTP服务器地址与端口。在部分.NET版本中,未配置Host的情况下,Credentials的赋值可能无法被正确保留。

Gmail的SMTP必填配置:

  • Host: smtp.gmail.com
  • Port: 587(推荐,使用STARTTLS)或465(SSL直连)

2. 修正后的完整代码

Dim SmtpServer As New SmtpClient()
Dim Email As New MailMessage()

' 先配置SMTP服务器核心参数
SmtpServer.Host = "smtp.gmail.com"
SmtpServer.Port = 587
SmtpServer.EnableSsl = True

' 再设置凭证(顺序不可颠倒)
SmtpServer.UseDefaultCredentials = False
Dim MyCredentials = New NetworkCredential("你的Gmail地址", "生成的16位应用密码")
SmtpServer.Credentials = MyCredentials

' 后续添加邮件内容、收件人等逻辑示例
' Email.From = New MailAddress("你的Gmail地址")
' Email.To.Add("收件人邮箱")
' Email.Subject = "测试邮件"
' Email.Body = "邮件内容"

' 发送邮件
' SmtpServer.Send(Email)

3. 额外排查点

  • 确认应用密码有效性:确保是开启两步验证后生成的16位无空格字符串,且对应正确的应用类别(如选择"邮件"或"其他")。
  • 检查代码覆盖问题:排查是否在赋值Credentials后,又执行了SmtpServer.Credentials = Nothing或重新初始化SmtpClient的逻辑。
  • .NET版本兼容性:若使用.NET Framework 4.0及以下版本,尝试升级到较新版本,旧版本对SmtpClient的凭证处理存在已知问题。

内容的提问来源于stack exchange,提问作者Ron at Moody Lake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:31:03