Skip to content

Commit 83b5582

Browse files
committed
Implement SMTPS support
1 parent 571e9ea commit 83b5582

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

smtp.go

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -326,22 +326,43 @@ func SendMail(addr string, a smtp.Auth, from string, to []string, msg []byte) er
326326
return err
327327
}
328328
}
329-
c, err := Dial(addr)
329+
host, port, err := net.SplitHostPort(addr)
330330
if err != nil {
331331
return err
332332
}
333-
defer c.Close()
334-
if err = c.hello(); err != nil {
335-
return err
336-
}
337-
if ok, _ := c.Extension("STARTTLS"); ok {
338-
config := &tls.Config{ServerName: c.serverName}
339-
if testHookStartTLS != nil {
340-
testHookStartTLS(config)
333+
var c *Client
334+
if port == "465" || port == "smtps" {
335+
config := &tls.Config{ServerName: host}
336+
conn, err := tls.Dial("tcp", addr, config)
337+
if err != nil {
338+
return err
341339
}
342-
if err = c.StartTLS(config); err != nil {
340+
defer conn.Close()
341+
c, err = NewClient(conn, host)
342+
if err != nil {
343+
return err
344+
}
345+
if err = c.hello(); err != nil {
343346
return err
344347
}
348+
} else {
349+
c, err = Dial(addr)
350+
if err != nil {
351+
return err
352+
}
353+
defer c.Close()
354+
if err = c.hello(); err != nil {
355+
return err
356+
}
357+
if ok, _ := c.Extension("STARTTLS"); ok {
358+
config := &tls.Config{ServerName: c.serverName}
359+
if testHookStartTLS != nil {
360+
testHookStartTLS(config)
361+
}
362+
if err = c.StartTLS(config); err != nil {
363+
return err
364+
}
365+
}
345366
}
346367
if a != nil && c.ext != nil {
347368
if _, ok := c.ext["AUTH"]; !ok {

0 commit comments

Comments
 (0)