golang TLS方式发送邮件
package mail import ( "crypto/tls" "errors" "fmt" "net/smtp" "net/textproto" ) type loginAuth struct { username, password string } // LoginAuth is func LoginAuth(username string, password string) smtp.Auth { return &loginAuth{username, password} } func (a *loginAuth) Start(server *smtp.ServerInfo) (string, []byte, error) { return "LOGIN", []byte{}, nil } func (a *loginAuth) Next(fromServer []byte, more bool) ([]byte, error) { if more { switch string(fromServer) { case "Username:": return []byte(a.username), nil case "Password:": return []byte(a.password), nil default: return nil, errors.New("UNKNOWN SERVER") } } return nil, nil } func SendMail(fromEmail string, recepients string, subject, body, mailServer, mailPort, mailUser, mailPassword string) error { headers := make(map[string]string) headers["From"] = fromEmail headers["To"] = recepients headers["Subject"] = subject headers["Content-Type:text/html;charset=\"UTF-8\""] = "" message := "" for k, v := range headers { message += fmt.Sprintf("%s: %s\r\n", k, v) } message += body tlsconfig := &tls.Config{ InsecureSkipVerify: false, ServerName: mailServer, } conn, err := tls.Dial("tcp", mailServer+":"+mailPort, tlsconfig) if err != nil { err = fmt.Errorf("mail: tls.Dial error: %v", err) return err } c, err := smtp.NewClient(conn, mailServer) if err != nil { err = fmt.Errorf("mail: smtp.NewClient error. %v", err) return err } if err = c.Auth(LoginAuth(mailUser, mailPassword)); err != nil { err = fmt.Errorf("mail: c.Auth error. %v", err) return err } if err = c.Mail(fromEmail); err != nil { err = fmt.Errorf("mail: c.Mail error. %v", err) return err } if err = c.Rcpt(recepients); err != nil { err = fmt.Errorf("mail: c.Rcpt error. %v", err) return err } w, err := c.Data() if err != nil { err = fmt.Errorf("mail: c.Data error. %v", err) return err } _, err = w.Write([]byte(message)) if err != nil { err = fmt.Errorf("mail: w.Write error. %v", err) return err } err = w.Close() if err != nil { err = fmt.Errorf("mail: w.Close error. %v", err) return err } c.Quit() return nil }
本文作者:单眼皮Boy
本文链接:https://www.cnblogs.com/ls11736/p/17296065.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
GO
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步