Отправка электронной почты из Office365 с помощью STARTTLS не удалась - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь отправить электронное письмо с сервера Office365, но получаю следующую ошибку:

паника: tls: первая запись не похожа на рукопожатие TLS

Конфигурация учетной записи следующая smtp.office365.com:587 (STARTTLS).Для аутентификации требуется имя пользователя + пароль.Код, который я использую, очень похож на все примеры, которые я видел в сети, но я не могу заставить его работать.Это терпит неудачу в tls.Dial.

    func Mail() {
    mail := Mail{}
    mail.senderId = "theemail@example.com"
    mail.toIds = []string{"anotheremail@example.com"}
    mail.subject = "This is the email subject"
    mail.body = "body"

    messageBody := mail.BuildMessage()

    smtpServer := SmtpServer{host: "smtp.office365.com", port: "587"}


    auth := smtp.PlainAuth("", mail.senderId, `mypassword`, smtpServer.host)

    fmt.Println(auth)


    tlsconfig := &tls.Config{
        InsecureSkipVerify: true,
        ServerName:         smtpServer.host,
    }

    conn, err := tls.Dial("tcp", "smtp.office365.com:587", tlsconfig)

    if err != nil {
        log.Panic(err)
    }

    client, err := smtp.NewClient(conn, smtpServer.host)
    if err != nil {
        log.Panic(err)
    }


    if err = client.Auth(auth); err != nil {
        log.Panic(err)
    }


    if err = client.Mail(mail.senderId); err != nil {
        log.Panic(err)
    }
    for _, k := range mail.toIds {
        if err = client.Rcpt(k); err != nil {
            log.Panic(err)
        }
    }


    w, err := client.Data()
    if err != nil {
        log.Panic(err)
    }

    _, err = w.Write([]byte(messageBody))
    if err != nil {
        log.Panic(err)
    }

    err = w.Close()
    if err != nil {
        log.Panic(err)
    }

    client.Quit()

    log.Println("Mail sent successfully")

}

1 Ответ

0 голосов
/ 01 марта 2019

Вы пытаетесь выполнить набор tls для порта, который не инкапсулирован в TLS.Если вы хотите использовать starttls

client, err := smtp.Dial("tcp", "smtp.office365.com:587")

if err != nil {
    log.Panic(err)
}

err = client.StartTLS(tlsconfig)
if err != nil {
    log.Panic(err)
}
...