尝试连接到 mailtrap smtp 时,获得的第一条记录看起来不像 TLS 握手

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

我有以下用于创建 SMTP 连接的代码:

func NewSMTPClient(host, username, password string, port int) (*smtp.Client, error) {
    tlsConfig := &tls.Config{ServerName: host}

    conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%d", host, port), tlsConfig)
    if err != nil {
        return nil, fmt.Errorf("smtp client: tcp dial: %s", err.Error())
    }

    c, err := smtp.NewClient(conn, host)
    if err != nil {
        return nil, fmt.Errorf("smtp client: new client: %s", err.Error())
    }

    auth := smtp.PlainAuth("", username, password, host)
    if err = c.Auth(auth); err != nil {
        return nil, fmt.Errorf("smtp client: get auth: %s", err.Error())
    }

    return &c, nil
}

此代码与

Yandex
SMTP 服务器配合得很好。但是当我尝试在单元测试中使用
MailTrap
对其进行测试时(因为我不想每次测试代码时都向人们发送电子邮件),我收到了此错误:

smtp client: tcp dial: tls: first record does not look like a TLS handshake

编辑1:

我尝试将

InsecureSkipVerify
设置为
true
,但仍然遇到同样的错误;虽然
MailTrap
配置表明我应该能够使用
TLS
:

TLS: Optional (STARTTLS on all ports)
go ssl mailtrap
2个回答
1
投票

您尝试连接的 SMTP 服务器可能不支持 STARTTLS。


0
投票

只需添加此问题的答案,以防它仍然有帮助

在这种情况下,我们必须使用

net.Dial
而不是
tls.Dial
。我遇到了同样的问题,仅通过使用
net.Dial
就解决了。所以,在这种情况下

conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", host, port))
if err != nil {
}
© www.soinside.com 2019 - 2024. All rights reserved.