packagemainimport("crypto/tls""fmt""gopkg.in/gomail.v2""time")funcmain(){m:=gomail.NewMessage()m.SetHeader("From","sender@example.com")m.SetHeader("To","recipient1@example.com","recipient2@example.com")m.SetHeader("Cc","cc1@example.com","cc2@example.com")m.SetHeader("Subject","Hello!")m.SetBody("text/html",fmt.Sprintf("This is a test email, from go language program, current time is %s",time.Now().Format("2006-01-02 15:04:05")))m.Attach("./gomail/test.png")// 添加附件// 设置邮件服务器信息(以163邮箱为例)d:=gomail.NewDialer("smtp.163.com",465,"sender@example.com","XXXXXXXXXXXXXXXX")// 这个需要要对应的邮件去申请SMTP授权密码// 跳过TLS证书验证,设置InsecureSkipVerify为true(生产环境不建议这样使用)// d.TLSConfig = &tls.Config{InsecureSkipVerify: true}iferr:=d.DialAndSend(m);err!=nil{panic(err)}fmt.Println("Mail sent successfully!")}
packagemainimport("crypto/tls""fmt""gopkg.in/gomail.v2""gopkg.in/ini.v1""log""strings""time")funcmain(){// 初始化邮件发送配置cfg,err:=ini.Load("./gomail/email_config.ini")iferr!=nil{log.Fatalf("Failed to load email config: %v",err)}// 读取发送邮箱信息senderEmail:=cfg.Section("sender").Key("email").String()password:=cfg.Section("sender").Key("password").String()smtpServer:=cfg.Section("sender").Key("smtp_server").String()smtpPort:=cfg.Section("sender").Key("smtp_port").MustInt(587)// 连接到 SMTP 服务器d:=gomail.NewDialer(smtpServer,smtpPort,senderEmail,password)d.TLSConfig=&tls.Config{InsecureSkipVerify:true}// 读取接收方和抄送方邮箱信息toListStr:=cfg.Section("recipient").Key("to_list").String()toLists:=strings.Split(toListStr,",")ccListStr:=cfg.Section("recipient").Key("cc_list").String()iflen(ccLists[0])>0{m.SetHeader("Cc",ccLists...)}// 设置发送方、接收方、抄送方邮箱m:=gomail.NewMessage()m.SetHeader("From",senderEmail)m.SetHeader("To",toLists...)m.SetHeader("Cc",ccLists...)// 设置邮件内容m.SetHeader("Subject","Hello!")m.SetBody("text/html",fmt.Sprintf("This is a test email, from go language program, current time is %s",time.Now().Format("2006-01-02 15:04:05")))m.Attach("./gomail/test.png")// 发送邮件iferr:=d.DialAndSend(m);err!=nil{log.Fatalf("Failed to send email, err: %v",err)}log.Println("Email sent successfully!")}
这段代码演示了如何使用 Go 语言的 gomail 包发送邮件,其中邮件配置信息从一个 INI 文件中加载。
funcrenderHtmlContent(verificationCodestring)string{// 读取 HTML 模板文件templateBytes,err:=os.ReadFile("./send_email/注册模板.html")iferr!=nil{panic(err)}// 创建 HTML 模板tmpl,err:=template.New("emailTemplate").Parse(string(templateBytes))iferr!=nil{panic(err)}// 创建缓冲区来存储模板渲染后的内容varrenderedEmailContentstringbuffer:=&bytes.Buffer{}// 将验证码插入到模板data:=struct{VerificationCodestringCurrentTimestring}{VerificationCode:verificationCode,CurrentTime:time.Now().Format("2006-01-02 15:04:05"),}// 渲染模板err=tmpl.Execute(buffer,data)iferr!=nil{panic(err)}// 获取渲染后的 HTML 内容renderedEmailContent=buffer.String()returnrenderedEmailContent}