我正在尝试使用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.MailServer
mailUsername := env.MailUsername
SMTP := 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
}
感谢您的帮助
函数式编程
一只名叫tom的猫
相关分类