forked from drew/smtprelay
Implement SMTPS support
This commit is contained in:
43
smtp.go
43
smtp.go
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user