本文共 2276 字,大约阅读时间需要 7 分钟。
目录
Go原生包net/smtp可以实现基本的发送邮件功能。Go的第三方包gomail可以实现更多的发送功能。下面来一一介绍。
部分邮箱(例如QQ邮箱)发送邮件时,使用的不是密码,而是授权码。授权码的获取方式请参考:。
需要使用 net/smtp 包
import ( "net/smtp")
identity := ""sender := "tcattime@qq.com"pwd := "lzffxekpzhuazsfeagb2"
⚠️发送者sender必须是合法有效的邮箱。有些邮箱发送时需要的是授权码,而非密码。因此需要将pwd的值替换为授权码。
host :="smtp.qq.com"port := "25"
使用QQ邮箱作为发送者邮箱时,域名和端口如上配置。
可以一次性发送给多个用户:
sendTo:=[]string{"tester@qq.com", "cat@huawei.com"}
senderName := "TCatTime"
定义邮件发送者的名字。
title := "have a nice day"body := "test8.0"
定义邮件的标题和正文内容。
调用smtp包中的PlainAuth函数,生成授权。
auth := smtp.PlainAuth(identity, sender, pwd, host)
content_type := "Content-Type: text/html; charset=UTF-8"
msg := []byte("To: " + strings.Join(sendTo, ",",) + "\nFrom: " + senderName + "<" + sender + ">\nSubject: " + title + "\n" + content_type + "\n" + body + "\n")url := host + ":" + port
err := smtp.SendMail(url, auth, sender, sendTo, msg)if err != nil { fmt.Printf("\n\nsend mail error: %v", err) return}fmt.Println("\n\nsend mail success!")
gomail框架对go原生的smtp包做了一层封装,使用更直观、简便。且gomail可以更方便的发送带有附件的邮件、添加抄送者等。
1、使用go-get获取
github.com/go-gomail/gomail
2、使用go-mod获取
进入项目目录下
go mod tidy
m := gomail.NewMessage()
m.SetAddressHeader("From", "a@qq.com", "发件人")
m.SetHeader("To", m.FormatAddress("b@qq.com", "收件人"))
m.SetHeader("Cc", m.FormatAddress("xxxx@foxmail.com", "收件人1"), m.FormatAddress("xxxx@foxmail.com", "收件人2"))
m.SetHeader("Bcc", m.FormatAddress("xxxx@gmail.com", "收件人1"), m.FormatAddress("xxxx@gmail.com", "收件人2"))
m.SetHeader("Subject", "go-mail测试")
SetHeader方法的第一个参数表示邮件标题(Subject),第二个参数表示邮件主题(go-mail测试)。
m.SetBody("Content-Type: text/html; charset=UTF-8", "go-mail")
SetBody()方法的第一个参数表示正文内容的类型和默认的编码格式。第二个参数是正文内容。
m.Attach("/Users/root/Desktop/demo.docx")
使用Attach()方法添加一个附件到邮件中。附件的路径为服务器端的绝对路径。
发送邮件的最后一项准备工作是设置拨号器。使用NewDialer()函数生成一个拨号器。将邮件服务器、端口、发送者邮箱、密码(或授权码)依次传入NewDialer()函数中。以QQ邮箱为例:
d := gomail.NewDialer("smtp.qq.com", 25, "demo@qq.com", "lzfxkkpzuasfeagz")
最后一步,发送!
err := d.DialAndSend(m)if err != nil { fmt.Println("send mail error:", err.Error()) return}fmt.Println("Send mail finished!")
转载地址:http://fbsoi.baihongyu.com/