Implement SMTPS support

This commit is contained in:
Bernhard Froehlich
2018-12-26 20:58:13 +00:00
parent 571e9ea942
commit 83b558239a

43
smtp.go
View File

@@ -326,22 +326,43 @@ func SendMail(addr string, a smtp.Auth, from string, to []string, msg []byte) er
return err return err
} }
} }
c, err := Dial(addr) host, port, err := net.SplitHostPort(addr)
if err != nil { if err != nil {
return err return err
} }
defer c.Close() var c *Client
if err = c.hello(); err != nil { if port == "465" || port == "smtps" {
return err config := &tls.Config{ServerName: host}
} conn, err := tls.Dial("tcp", addr, config)
if ok, _ := c.Extension("STARTTLS"); ok { if err != nil {
config := &tls.Config{ServerName: c.serverName}
if testHookStartTLS != nil {
testHookStartTLS(config)
}
if err = c.StartTLS(config); err != nil {
return err return err
} }
defer conn.Close()
c, err = NewClient(conn, host)
if err != nil {
return err
}
if err = c.hello(); err != nil {
return err
}
} else {
c, err = Dial(addr)
if err != nil {
return err
}
defer c.Close()
if err = c.hello(); err != nil {
return err
}
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
}
}
} }
if a != nil && c.ext != nil { if a != nil && c.ext != nil {
if _, ok := c.ext["AUTH"]; !ok { if _, ok := c.ext["AUTH"]; !ok {