Я пытаюсь создать службу электронной почты с помощью 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
}
Спасибо за вашу помощь