SendMail
拨号 SMTP 服务器使用的是非 TLS 的 TCP 连接,可能你的 SMTP 服务器默认使用带有 SSL 的 TCP 连接,不支持 STARTTLS
扩展。客户端发送 STARTTLS
命令,但服务器没有回复,因此现在被阻塞。
func SendMail(addr string, a Auth, from string, to []string, msg []byte) error {
......
if ok, _ := c.Extension("STARTTLS"); ok {
config := &tls.Config{ServerName: c.serverName}
if testHookStartTLS != nil {
testHookStartTLS(config)
}
if err = c.StartTLS(config); err != nil {
return err
}
}
......
}
现在您可以使用TLS拨打SMTP服务器,这不会被阻止。具体请参见
示例代码,或使用非TLS端口。
func SendMailTLS(addr string, auth smtp.Auth, from string, to []string, msg []byte) error {
......
tlsconfig := &tls.Config{ServerName: host}
if err = validateLine(from); err != nil {
return err
}
......
conn, err := tls.Dial("tcp", addr, tlsconfig)
if err != nil {
return err
}
defer conn.Close()
c, err := smtp.NewClient(conn, host)
......