实践使用 Go 发送邮件

2,684 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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。