Nano Hash - криптовалюты, майнинг, программирование

Ошибка Golang SMTP: 535 5.7.0 Неверный логин или пароль

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

Спасибо за вашу помощь

01.06.2021

  • Поддерживает ли SMTP-сервер метод аутентификации LOGIN? Не все делают, возможно, вместо этого серверу требуется PLAIN. Проверьте объявленные механизмы аутентификации в файле smtp.ServerInfo. 01.06.2021

Ответы:


1

Ошибка, которую вы получаете, определенно возвращается с smtp-сервера. Существует несколько механизмов аутентификации, поддерживаемых протоколом smtp. Если вы точно не знаете, какие из них поддерживаются вашим сервером, вы можете отладить его вручную с помощью следующей команды openssl s_client -crlf -ign_eof -connect <smtp_host>:<TLS_port>. После отправки EHLO на сервер он сообщит о поддерживаемых механизмах аутентификации. Затем вы можете попробовать войти вручную и правильно реализовать Start() и Next().
Обратите внимание, что некоторые методы требуют кодирования логина и пароля (base64, md5 и т. д.).

01.06.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..