求助:SMTP发送邮件出现Mailbox Name Not Allowed等错误,求排查建议
SMTP发送邮件报错排查建议
嘿,我看到你被这个SMTP发送错误卡了好久:
错误信息:不允许使用该邮箱名称。发件人地址被拒绝。未登录

结合你的VB代码,我整理了几个大概率能解决问题的方向,你可以逐个排查:
优先检查邮箱账号的认证权限:
现在主流邮件服务商(比如Gmail、Outlook、QQ邮箱)都对第三方SMTP登录有严格限制。如果你的账号开启了两步验证,必须使用应用专用密码登录,而不是普通的账号密码;如果没开两步验证,也要确保账号设置里开启了“允许低安全性应用访问”(有些平台叫“第三方应用权限”)。这是最常见触发这个错误的原因。确保发件人地址和登录账号完全一致:
很多SMTP服务器会校验From地址是否和登录的账号匹配,比如你用test@example.com登录,但发件人填了other@example.com,直接就会被拒绝。检查你代码里的txtFrom.Text,确保它和NetworkCredential里的邮箱是同一个。端口和SSL/TLS设置要匹配:
不同服务商的SMTP端口要求不一样,比如:- Gmail:465(强制SSL)或587(TLS)
- Outlook/Hotmail:587(TLS)
- QQ邮箱:465(SSL)
你代码里直接用cmbPort.Text赋值给Port(整数类型),如果输入的不是数字还会额外报错,建议先转成整数:Smtp_Server.Port = Integer.Parse(cmbPort.Text)。同时确认EnableSsl的勾选状态和端口要求对应,比如用587端口时,有些服务器需要TLS,这时候EnableSsl应该设为True。
代码里的小问题优化:
你代码里重复实例化了MailMessage,而且没有释放资源,容易造成连接泄漏。这里给你调整后的代码,用Using语句自动释放资源,同时修复了潜在的类型问题:
Try Using Smtp_Server As New SmtpClient() Using e_mail As New MailMessage() Smtp_Server.UseDefaultCredentials = False ' 统一登录邮箱和发件人地址,避免不匹配 Dim loginEmail = txtFrom.Text Smtp_Server.Credentials = New Net.NetworkCredential(loginEmail, txtPassword.Text) ' 转换端口为整数,避免字符串转整数错误 Smtp_Server.Port = Integer.Parse(cmbPort.Text) Smtp_Server.EnableSsl = cbxSSL.Checked Smtp_Server.Host = cmbHost.Text e_mail.From = New MailAddress(loginEmail) e_mail.To.Add(txtTo.Text) e_mail.Subject = "Auto Email" e_mail.IsBodyHtml = False e_mail.Body = "Hi, This is test mail." Smtp_Server.Send(e_mail) MsgBox("Mail Sent") End Using End Using Catch error_t As Exception MsgBox(error_t.ToString) End Try
你可以先从账号权限和地址匹配这两点入手,这两个解决了大部分这类问题。如果还是不行,再检查端口和SSL设置,或者换个测试邮箱(比如用QQ邮箱先测试通不通)。
内容的提问来源于stack exchange,提问作者Sixthsense
相关产品推荐
相关产品推荐

