尝试通过 SSL 发送电子邮件时出现身份验证错误

问题描述 投票:0回答:1

我运行一个电子邮件服务器,桌面客户端可以通过 SSL/TLS 连接并毫无问题地发送电子邮件。但是,我还没有使用 相同的凭据 在 Go 中这样做。

import (
    
    "fmt"
    "log"
    "net/mail"
    "net/smtp"
    "os"
    "crypto/tls"
    "github.com/joho/godotenv"
)

func init() {
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error loading .env file")
    }

    smtpHost = os.Getenv("EMAIL_SERVER_SMTP_HOST")

    //465
    smtpPort = os.Getenv("EMAIL_SERVER_SMTP_PORT")
    //.........
}

func sendEmail(to mail.Address, subject string, body string) (string, error) {
    headers := make(map[string]string)
    newUuid, err := uuid.NewRandom()
    headers["Message-ID"] = newUuid.String()
    headers["From"] = from.String()
    headers["To"] = to.String()
    headers["Subject"] = subject

    // Setup message
    message := ""
    for k, v := range headers {
        message += fmt.Sprintf("%s: %s\r\n", k, v)
    }

    message += "\r\n" + body
    auth := smtp.PlainAuth("", userLogin, userPassword, smtpHost)

    // TLS config
    tlsConfig := &tls.Config{
        InsecureSkipVerify: false,
        ServerName:         smtpHost,
    }

    conn, err := tls.Dial("tcp", serverName, tlsConfig)
    if err != nil {
        log.Panic(err)
    }

    c, err := smtp.NewClient(conn, smtpHost)
    if err != nil {
        log.Panic(err)
    }

    //!!! error here
    if err = c.Auth(auth); err != nil {
        log.Panic(err)
    }

    //.........

    c.Quit()
    return msgId, nil
}

错误

panic: 535 5.7.8 Error: authentication failed: 

在服务器的日志中,除此之外没有其他信息。

所有凭据都从“.env”中正确读取。

怎么了?

go ssl smtp tls1.2 postfix-mta
1个回答
0
投票

通常使用 SMTP,你会使用

smtp.Dial
然后
c.StartTLS
,即这样做:

auth := smtp.PlainAuth("", userLogin, userPassword, smtpHost)

tlsconfig := &tls.Config {
    InsecureSkipVerify: false,
    ServerName: smtpHost,
}

c, err := smtp.Dial(servername)
if err != nil {
    log.Panic(err)
}

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

err = c.Auth(auth)
if err != nil {
    log.Panic(err)
}
© www.soinside.com 2019 - 2024. All rights reserved.