持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
使用 net/stmp 发送邮件
在开发一个发送邮件的功能时。查资料时 ,Go 提供了一个可以支持发送邮件的包 net/stmp。于是就直接用来进行测试一下:
func EmailTest() {
from := "test@123.com"
password := "123456"
to := []string{"reciver@email.com"}
smtpHost := "smtp.gmail.com"
smtpPort := "587"
message := []byte("i will send message")
auth := smtp.PlainAuth("",from,password,smtpHost)
err:=smtp.SendMail(smtpHost+":"+smtpPort,auth,from,to,message)
if err != nil {
fmt.Println("send email error")
}
}
从上面Demo 可以看到其中最重要的两个方法:PlainAuth 和 SendMail:
PlainAuth:提供使用用户名和密码的普通认证机制。返回的 Auth 使用给定的用户名和密码来验证主机并充当身份。 通常身份应该是空字符串,作为用户名。
只有当连接使用 TLS 或连接到 localhost 时,PlainAuth 才会发送凭据。 否则身份验证将失败并出现错误,而不发送凭据。
SendMail:实际发送邮件的函数。 它使用之前创建的身份验证连接到邮件服务器(自动处理 TLS,如果可用)并发送邮件。
使用第三包 go-simple-mail
但是在使用 net/stmp 进行发送邮件是,还是有局限性,比如无法发送附件文件等问题。后来又找到一个新的发送邮件的包可以直接更多的功能。
使用该包可以发送 html 格式的消息,带有附件的邮件,也可以给多个人发送邮件等等功能。
go get github.com/xhit/go-simple-mail/v2
安装完就可以实践一下:
func EmailTest2() {
server := mail.NewSMTPClient()
server.Host = "smtp.host.com"
server.Port = 587
server.Username = "username@host.com"
server.Password = "supersecretpassword"
server.Encryption = mail.EncryptionTLS
smtpClient, err := server.Connect()
if err != nil {
log.Fatal(err)
}
// Create email
email := mail.NewMSG()
email.SetFrom("From Me <me@host.com>")
email.AddTo("you@example.com")
email.AddCc("another_you@example.com")
email.SetSubject("New Go Email")
htmlStr := `<html></html>`
email.SetBody(mail.TextHTML, htmlStr) //发送html信息
email.AddAttachment("super_cool_file.png") // 附件
// Send email
err = email.Send(smtpClient)
if err != nil {
log.Fatal(err)
}
}
- 使用 NewSMTPClient 函数创建一个 STMPClient 对象。 该对象将用于配置 SMTP 服务器,如主机、密码、用户名等。
- 使用 NewMSG 创建新的电子邮件。 使用此对象,您可以配置收件人、发件人、电子邮件主题、正文、附加文件等参数。详细的参数什么的可以参照看下官方提供的说明
- 之后,您需要使用 server.Connect() 函数连接 SMTP 服务器。 连接后,只需使用功能 email.Send 发送电子邮件。
所以,整个过程还是很简单的,不会使用的话也可以去官网上看 demo。