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

VB.NET Web Form点击btnSubmit发送邮件触发Catch异常报错

问题场景

在ASP.NET Web Form(.aspx.vb后置代码)中实现btnSubmit按钮点击发送邮件功能时,代码进入Catch ex As Exception异常分支,邮件发送失败。原有实现代码如下:

Dim mail As MailMessage = New MailMessage

mail.From = New MailAddress("example@gmail.com")
mail.To.Add(New MailAddress("example@gmail.com"))
mail.Subject = "TEST SUBJECT"
mail.Body = "Test Message"

mail.IsBodyHtml = True

Dim client As SmtpClient = New SmtpClient("smtp.gmail.com", 587)
client.EnableSsl = True
Try
    client.Send(mail)
    MsgBox("Sending Email succeeded") 'Return True if there is nothing error while sending email.    
Catch ex As Exception
    MsgBox("Sending Email failed. Please try again")
End Try
故障原因
  • 核心配置缺失:Gmail SMTP服务强制要求身份验证,原有代码未给SmtpClient配置账号凭证,请求会被服务端直接拒绝
  • 方法调用错误:MsgBox是桌面端程序的弹窗方法,仅能在本地客户端上下文运行,在Web服务端调用会直接抛出异常,无法给浏览器端用户弹出提示
  • 账号权限限制:Gmail已下线低安全性应用访问入口,直接使用账号登录密码调用SMTP会被安全策略拦截
  • 资源未正确释放:MailMessage、SmtpClient均为非托管资源对象,未做释放处理偶发会触发资源占用类异常
修正后代码
' 写在btnSubmit按钮的服务端Click事件方法中
' 请将以下常量替换为实际的账号信息,发件人密码需使用Gmail生成的16位应用专用密码,不要使用账号登录密码
Const senderAddress As String = "你的发件Gmail邮箱@gmail.com"
Const senderPassword As String = "Gmail账号生成的16位应用专用密码"
Const receiverAddress As String = "收件人邮箱地址@gmail.com"

Using mail As New MailMessage()
    mail.From = New MailAddress(senderAddress)
    mail.To.Add(New MailAddress(receiverAddress))
    mail.Subject = "TEST SUBJECT"
    mail.Body = "Test Message"
    mail.IsBodyHtml = True

    Using client As New SmtpClient("smtp.gmail.com", 587)
        client.EnableSsl = True
        ' 补充缺失的SMTP身份验证配置
        client.Credentials = New System.Net.NetworkCredential(senderAddress, senderPassword)
        Try
            client.Send(mail)
            ' 替换服务端非法弹窗方法,注册客户端脚本给用户弹出提示
            ClientScript.RegisterStartupScript(Me.GetType(), "sendSuccess", "alert('邮件发送成功');", True)
        Catch ex As Exception
            ' 调试阶段可输出ex.Message查看具体错误原因,正式环境可隐藏详细报错
            ClientScript.RegisterStartupScript(Me.GetType(), "sendFail", $"alert('邮件发送失败,请稍后重试');", True)
        End Try
    End Using
End Using
前置配置要求
  • 发件用的Gmail账号必须先开启两步验证,之后在账号安全设置页面生成16位长度的应用专用密码,作为SMTP登录的凭证使用
  • 部署代码的服务器需要放行对smtp.gmail.com 587端口的出站请求,避免被防火墙、网络策略拦截
  • 所有Web服务端代码中禁止调用WinForm、WPF等桌面框架专属的UI交互方法,这类方法无法在Web场景下正常工作

内容的提问来源于stack exchange,提问作者Una O Lian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:30:44