Merge pull request #16 from gongwalker/patch-2
Add mail to send SSL encrypted go to port 465
This commit is contained in:
104
notify/email.go
104
notify/email.go
@@ -2,13 +2,16 @@
|
||||
** @Description: notify
|
||||
** @Author: george hao
|
||||
** @Date: 2018-08-08 12:59
|
||||
** @Last Modified by: george hao
|
||||
** @Last Modified time: 2018-08-08 12:59
|
||||
** @Last Modified by: gwalker
|
||||
** @Last Modified time: 2018-11-26 14:57
|
||||
*************************************************************/
|
||||
package notify
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"github.com/astaxie/beego"
|
||||
"net"
|
||||
"net/smtp"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -89,16 +92,99 @@ func SendToChan(to, subject, body, mailtype string) bool {
|
||||
|
||||
func (pe *PEmail) SendToEmail() error {
|
||||
auth := smtp.PlainAuth("", pe.Config.User, pe.Config.Pwd, pe.Config.Host)
|
||||
var contentType string
|
||||
if pe.Format == "html" {
|
||||
contentType = "Content-Type: text/" + pe.Format + "; charset=UTF-8"
|
||||
} else {
|
||||
contentType = "Content-Type: text/plain" + "; charset=UTF-8"
|
||||
}
|
||||
contentType := GetContentTypeString(pe.Format)
|
||||
|
||||
msg := []byte("To: " + pe.To + "\r\nFrom: " + pe.Config.User +
|
||||
"\r\nSubject: " + pe.Subject + "\r\n" + contentType + "\r\n\r\n" + pe.Body)
|
||||
|
||||
sendTo := strings.Split(pe.To, ";")
|
||||
err := smtp.SendMail(pe.Config.Host+":"+pe.Config.Port, auth, pe.Config.User, sendTo, msg)
|
||||
|
||||
var err error
|
||||
|
||||
if pe.Config.Port == "25" {
|
||||
err = SendMailUsing25(pe.Config.Host,pe.Config.Port,auth,pe.Config.User,sendTo,msg)
|
||||
} else if pe.Config.Port == "465" {
|
||||
err = SendMailUsing465(pe.Config.Host,pe.Config.Port,auth,pe.Config.User,sendTo,msg)
|
||||
} else{
|
||||
err = fmt.Errorf("%s","other ports are not supported,please check the app.conf configuration file")
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
|
||||
func GetContentTypeString ( format string ) string {
|
||||
var contentType string
|
||||
if format == "" {
|
||||
contentType = "Content-Type: text/plain" + "; charset=UTF-8"
|
||||
} else {
|
||||
contentType = "Content-Type: text/" + format + "; charset=UTF-8"
|
||||
}
|
||||
return contentType
|
||||
}
|
||||
|
||||
|
||||
func SendMailUsing25(addr string, port string, auth smtp.Auth, from string, to []string, msg []byte) (err error) {
|
||||
err = smtp.SendMail(addr+":"+port, auth, from, to, msg)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
|
||||
func SendMailUsing465(addr string,port string, auth smtp.Auth, from string, to []string, msg []byte) (err error) {
|
||||
c, err := Dial(addr+":"+port)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer c.Close()
|
||||
|
||||
if auth != nil {
|
||||
if ok, _ := c.Extension("AUTH"); ok {
|
||||
if err = c.Auth(auth); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err = c.Mail(from); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
for _, addr := range to {
|
||||
if err = c.Rcpt(addr); err != nil {
|
||||
fmt.Print(err)
|
||||
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()
|
||||
}
|
||||
|
||||
|
||||
func Dial(addr string) (*smtp.Client, error) {
|
||||
conn, err := tls.Dial("tcp", addr, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
//分解主机端口字符串
|
||||
host, _, _ := net.SplitHostPort(addr)
|
||||
return smtp.NewClient(conn, host)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user