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
|
** @Description: notify
|
||||||
** @Author: george hao
|
** @Author: george hao
|
||||||
** @Date: 2018-08-08 12:59
|
** @Date: 2018-08-08 12:59
|
||||||
** @Last Modified by: george hao
|
** @Last Modified by: gwalker
|
||||||
** @Last Modified time: 2018-08-08 12:59
|
** @Last Modified time: 2018-11-26 14:57
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
package notify
|
package notify
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"fmt"
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
|
"net"
|
||||||
"net/smtp"
|
"net/smtp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -89,16 +92,99 @@ func SendToChan(to, subject, body, mailtype string) bool {
|
|||||||
|
|
||||||
func (pe *PEmail) SendToEmail() error {
|
func (pe *PEmail) SendToEmail() error {
|
||||||
auth := smtp.PlainAuth("", pe.Config.User, pe.Config.Pwd, pe.Config.Host)
|
auth := smtp.PlainAuth("", pe.Config.User, pe.Config.Pwd, pe.Config.Host)
|
||||||
var contentType string
|
contentType := GetContentTypeString(pe.Format)
|
||||||
if pe.Format == "html" {
|
|
||||||
contentType = "Content-Type: text/" + pe.Format + "; charset=UTF-8"
|
|
||||||
} else {
|
|
||||||
contentType = "Content-Type: text/plain" + "; charset=UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
msg := []byte("To: " + pe.To + "\r\nFrom: " + pe.Config.User +
|
msg := []byte("To: " + pe.To + "\r\nFrom: " + pe.Config.User +
|
||||||
"\r\nSubject: " + pe.Subject + "\r\n" + contentType + "\r\n\r\n" + pe.Body)
|
"\r\nSubject: " + pe.Subject + "\r\n" + contentType + "\r\n\r\n" + pe.Body)
|
||||||
|
|
||||||
sendTo := strings.Split(pe.To, ";")
|
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
|
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