golong实现邮件发送
1. 发送邮件包
package myMail import ( "crypto/tls" "fmt" "github.com/go-admin-team/go-admin-core/sdk/config" ext "go-admin/config" "net/smtp" "strings" "time" ) type MyEmail struct{ Host string Port string AuthUser string AuthPass string } func (e *MyEmail)SendEmail(mailTo string, subject string, body string) (bool, error) { //这里是从配置文件读邮件服务器配置信息 cfg, _ := config.ExtendConfig.(*ext.Extend) emailCfg := cfg.Emailcfg //没有配置文件直接赋值就行了 smtpHost := emailCfg.Host smtpPort := emailCfg.Port smtpUser := emailCfg.Authuser smtpPass := emailCfg.Authpass toSendList := mailTo t := time.Now() year,month,day := t.Date() curTime := fmt.Sprintf("%d-%d-%d %d:%d",year,month,day,t.Hour(),t.Minute()) auth := smtp.PlainAuth("", smtpUser,smtpPass,smtpHost) to := strings.Split(toSendList,",") header := make(map[string]string) header["From"] = smtpUser header["To"] = mailTo header["Date"] = curTime header["Subject"] = subject header["Content-Type"] = "text/html;charset=UTF-8" msg := "" for k,v := range header{ msg += fmt.Sprintf("%s:%s\r\n",k,v) } msg += "\r\n"+body conn,err := tls.Dial("tcp",smtpHost+":"+smtpPort,nil) if err != nil { HandleWarning(err) } co,err := smtp.NewClient(conn,smtpHost) if err != nil { HandleWarning(err) } defer co.Close() if auth != nil { if ok,_ := co.Extension("AUTH");ok { if err = co.Auth(auth);err != nil { HandleError(err) } } } if err = co.Mail(smtpUser); err != nil { HandleError(err) } for _,addr := range to { if err = co.Rcpt(addr); err != nil { HandleWarning(err) } } w,err := co.Data() if err != nil { HandleWarning(err) } _,err = w.Write([]byte(msg)) if err != nil { HandleWarning(err) } err = w.Close() if err != nil { HandleWarning(err) } co.Quit() return true,nil } func HandleWarning(err error) { //怎么处理警告可以在这里定义 } func HandleError(err error) { //怎么处理错误可以在这里定义 }
2. 使用
func sendReviewMail(mailInfo MailInfo) (b bool,err error){ subject := mailInfo.PrjNmEn + "项目 服务器申请" body := mailInfo.PrjNmEn + "项目,服务器申请已提交,请尽快审批" mailTo := "liubei-cto@xxx.com.cn" email := myMail.MyEmail{} b,err = email.SendEmail(mailTo,subject,body) if err != nil { return false,err } return b,nil }
合集:
- 第八章 go的一些用法
分类:
go语言开发 / go的其他用法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)