为了账号安全,请及时绑定邮箱和手机立即绑定

Golang SMTP 错误: 535 5.7.0 登录名或密码无效

Golang SMTP 错误: 535 5.7.0 登录名或密码无效

Go
蓝山帝景 2022-09-05 10:22:42
我正在尝试使用go创建电子邮件服务。当我尝试通过gmail或office365代码发送电子邮件时,工作正常,但当我尝试通过自定义smtp发送电子邮件时,我得到“535 5.7.0无效的登录名或密码”错误。我知道用户名和密码是正确的,因为我正在与另一个python服务使用相同的密码和用户名,其他服务工作正常。我没有任何自定义SMTP服务器的文档,但我知道SMTP服务器使用TLS我尝试了普通的身份验证,gomailer,smtp。SendMail() 函数,没有 startTLS,但没有任何变化。这是我的代码;func (m *Mail) sendMail(body, to, subject string) bool {env := common.GetEnvironment()mailServer := env.MailServermailUsername := env.MailUsernameSMTP := fmt.Sprintf("%s:%s", mailServer, env.MailPort)auth := LoginAuth(mailUsername, env.MailPassword)tlsconfig := &tls.Config{    ServerName: mailServer,}c, err := smtp.Dial(SMTP)if err != nil {    zap.S().Error(err)    return false}c.StartTLS(tlsconfig)if err = c.Auth(auth); err != nil {    zap.S().Error(err)    return false}if err = c.Mail(mailUsername); err != nil {    zap.S().Error(err)    return false}if err = c.Rcpt(to); err != nil {    zap.S().Error(err)    return false}w, err := c.Data()if err != nil {    zap.S().Error(err)    return false}_, err = w.Write([]byte(body))if err != nil {    zap.S().Error(err)    return false}err = w.Close()if err != nil {    zap.S().Error(err)    return false}c.Quit()return true}身份验证功能; import (    "errors"    "net/smtp")type loginAuth struct {    username, password string}func LoginAuth(username, password string) smtp.Auth {    return &loginAuth{username, password}}func (a *loginAuth) Start(server *smtp.ServerInfo) (string, []byte, error) {    return "LOGIN", []byte(a.username), nil}func (a *loginAuth) Next(fromServer []byte, more bool) ([]byte, error) {    if more {        switch string(fromServer) {        case "Username:":            return []byte(a.username), nil        case "Password:":            return []byte(a.password), nil        default:            return nil, errors.New("unknown from server")        }    }    return nil, nil}感谢您的帮助
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

您收到的错误肯定是从smtp服务器返回的。smtp 协议支持多种身份验证机制。如果您不确定服务器支持哪些,可以使用以下命令手动调试它。发送到服务器后,它将宣布支持的身份验证机制。然后,您可以尝试手动登录并正确实施。
请注意,某些方法需要对登录名和密码进行编码(base64、md5 等)。openssl s_client -crlf -ign_eof -connect <smtp_host>:<TLS_port>EHLOStart()Next()

查看完整回答
反对 回复 2022-09-05
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

命令“AUTH LOGIN”不需要用户名参数。


请尝试以下操作,您的身份验证可能会起作用(如果支持)


func (a *loginAuth) Start(server *smtp.ServerInfo) (string, []byte, error) {

    return "LOGIN", nil, nil

}


查看完整回答
反对 回复 2022-09-05
  • 2 回答
  • 0 关注
  • 678 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信