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,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!