From 83b558239adddccc70f90cc0a7351f58caa69837 Mon Sep 17 00:00:00 2001 From: Bernhard Froehlich Date: Wed, 26 Dec 2018 20:58:13 +0000 Subject: [PATCH] Implement SMTPS support --- smtp.go | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/smtp.go b/smtp.go index deaa1c1..fdb5d69 100644 --- a/smtp.go +++ b/smtp.go @@ -326,22 +326,43 @@ func SendMail(addr string, a smtp.Auth, from string, to []string, msg []byte) er return err } } - c, err := Dial(addr) + host, port, err := net.SplitHostPort(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 { + var c *Client + if port == "465" || port == "smtps" { + config := &tls.Config{ServerName: host} + conn, err := tls.Dial("tcp", addr, config) + if err != nil { 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 _, ok := c.ext["AUTH"]; !ok {