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

如何在Golang中借助gopkg.in/mail.v2检测SMTP认证错误?

检测SMTP认证错误的方法

Go标准库确实没有net.AuthenticateError这个类型,但你可以通过底层net/smtp包提供的错误类型来检测认证失败。gopkg.in/mail.v2本质上封装了标准库的SMTP实现,所以可以通过以下方式判断:

  • 导入net/smtp和errors包
  • 使用errors.As从返回的错误中提取*smtp.Error类型,然后检查错误码是否为535(SMTP协议中认证失败的标准错误码)

具体代码示例:

import (
    "errors"
    "net/smtp"
    gomail "gopkg.in/mail.v2"
)

// 邮件发送逻辑
func sendMail(d *gomail.Dialer, m *gomail.Message) error {
    if err := d.DialAndSend(m); err != nil {
        var smtpErr *smtp.Error
        // 从错误链中匹配底层SMTP错误
        if errors.As(err, &smtpErr) && smtpErr.Code == 535 {
            // 执行认证错误相关操作,比如日志记录、重试逻辑等
        }
        return err
    }
    return nil
}

说明

SMTP协议中,535是通用的"Authentication Failed"错误码,绝大多数邮件服务器都会用这个码表示账号/密码错误或认证方式不被支持。相比匹配错误消息文本,检查错误码的方式更稳定,不会因为不同服务器返回的提示文本差异而失效。

如果你的场景中遇到其他类似的认证相关错误码(比如部分服务器可能返回454),可以根据实际情况扩展判断条件,但535是最常见的认证失败场景。

内容的提问来源于stack exchange,提问作者Amir Hesari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:28:10