-
Notifications
You must be signed in to change notification settings - Fork 916
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Possibility to disable the TLS verify for sending mails.
- Loading branch information
Showing
5 changed files
with
116 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
// Copyright 2010 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license. | ||
package notifications | ||
|
||
import ( | ||
"crypto/tls" | ||
"net" | ||
"net/smtp" | ||
) | ||
|
||
// SendMail connects to the server at addr, switches to TLS if | ||
// possible, authenticates with the optional mechanism a if possible, | ||
// and then sends an email from address from, to addresses to, with | ||
// message msg. | ||
// The addr must include a port, as in "mail.example.com:smtp". | ||
// | ||
// The addresses in the to parameter are the SMTP RCPT addresses. | ||
// | ||
// The msg parameter should be an RFC 822-style email with headers | ||
// first, a blank line, and then the message body. The lines of msg | ||
// should be CRLF terminated. The msg headers should usually include | ||
// fields such as "From", "To", "Subject", and "Cc". Sending "Bcc" | ||
// messages is accomplished by including an email address in the to | ||
// parameter but not including it in the msg headers. | ||
// | ||
// The SendMail function and the net/smtp package are low-level | ||
// mechanisms and provide no support for DKIM signing, MIME | ||
// attachments (see the mime/multipart package), or other mail | ||
// functionality. Higher-level packages exist outside of the standard | ||
// library. | ||
func SendMail(addr string, insecureSkipVerify bool, a smtp.Auth, from string, to []string, msg []byte) error { | ||
c, err := smtp.Dial(addr) | ||
if err != nil { | ||
return err | ||
} | ||
defer c.Close() | ||
if err = c.Hello("localHost"); err != nil { | ||
return err | ||
} | ||
if ok, _ := c.Extension("STARTTLS"); ok { | ||
serverName, _, _ := net.SplitHostPort(addr) | ||
config := &tls.Config{ServerName: serverName, InsecureSkipVerify: insecureSkipVerify} | ||
if err = c.StartTLS(config); err != nil { | ||
return err | ||
} | ||
} | ||
if a != nil { | ||
if ok, _ := c.Extension("AUTH"); ok { | ||
if err = c.Auth(a); err != nil { | ||
return err | ||
} | ||
} | ||
} | ||
if err = c.Mail(from); err != nil { | ||
return err | ||
} | ||
for _, addr := range to { | ||
if err = c.Rcpt(addr); err != nil { | ||
return err | ||
} | ||
} | ||
w, err := c.Data() | ||
if err != nil { | ||
return err | ||
} | ||
_, err = w.Write(msg) | ||
if err != nil { | ||
return err | ||
} | ||
err = w.Close() | ||
if err != nil { | ||
return err | ||
} | ||
return c.Quit() | ||
} |