Go SMTP连接读取欢迎邮件

Go SMTP连接读取欢迎邮件,go,smtp,Go,Smtp,我尝试连接smtp服务器并阅读欢迎邮件。这是我的代码: package main import ( "fmt" "net" "time" "net/smtp" "bufio" ) func main() { // attempt a connection conn, _ := net.DialTimeout("tcp", "88.198.24.108:25", 15 * time.Second) buf := bufio.Ne

我尝试连接smtp服务器并阅读欢迎邮件。这是我的代码:

package main

import (
    "fmt"
    "net"
    "time"
    "net/smtp"
    "bufio"
)

func main() {
    // attempt a connection
    conn, _ := net.DialTimeout("tcp", "88.198.24.108:25", 15 * time.Second)

    buf := bufio.NewReader(conn)
    bytes, _ := buf.ReadBytes('\n')
    fmt.Printf("%s", bytes)


    client, err := smtp.NewClient(conn, "88.198.24.108")
    if err != nil {
        fmt.Println("1>>", err)
        return
    }

    client.Quit()
    conn.Close()
}
问题是在read welcome message停止运行并等待超时后,我想阅读/打印欢迎消息并继续

220 example.me ESMTP Haraka/2.8.18 ready
1>> 421 timeout

对标准库源代码的检查表明,
smtp.NewClient()
从远程主机读取smtp横幅并将其丢弃

func NewClient(conn net.Conn, host string) (*Client, error) {
    text := textproto.NewConn(conn)
    _, _, err := text.ReadResponse(220)
    if err != nil {
        text.Close()
        return nil, err
    }
    c := &Client{Text: text, conn: conn, serverName: host, localName: "localhost"}
    _, c.tls = conn.(*tls.Conn)
    return c, nil
}
您希望阅读此横幅并根据其内容决定是否发送邮件

由于您自己已经阅读了横幅,并且可能会就此做出决定,因此您应该在自己的代码中实现
NewClient()
的其余部分,而不是调用
smtp.NewClient()
,可能是这样的:

    client := &smtp.Client{Text: text, conn: conn, serverName: host, localName: "localhost"}
    _, client.tls = conn.(*tls.Conn)

您已经阅读了欢迎信息。你为什么这么做?您打算发送邮件还是做其他事情?@MichaelHampton我需要检查服务器是否为Haraka或其他什么。为什么要调用
smtp.NewClient()
?@MichaelHampton如果服务器与
Haraka
不同,那么我会发送电子邮件。谢谢您的帮助,我尝试使用你的代码:不打印欢迎信息并在超时时死亡:@kingcope该代码不包含任何证据表明你根据此答案对其进行了修改。请先这样做。