📜  在 Golang 中使用 Smtp 发送电子邮件(1)

📅  最后修改于: 2023-12-03 14:50:55.699000             🧑  作者: Mango

在 Golang 中使用 Smtp 发送电子邮件

在 Golang 中发送电子邮件可以使用标准库中的 net/smtp 包,通过它可以很方便地利用 SMTP 协议将电子邮件发送到指定的邮箱地址。

准备工作

在编写代码前,我们需要先获取邮箱提供商的 SMTP 服务器地址、端口号和登录信息,这些信息通常可以在邮件服务商的帮助文档中找到。

以 QQ 邮箱为例,我们可以先在账户设置中开启 SMTP 服务,并获取到 SMTP 服务器地址和端口号,例如:

smtp.qq.com
465

然后,我们需要设置登录信息,包括 SMTP 登录账号、SMTP 登录密码(或授权码)。这些信息也可以在邮件服务商的帮助文档中找到。

编写代码

首先,我们需要引入 net/smtp 包:

import (
    "net/smtp"
)

然后,我们需要构造一个 smtp.Auth 对象,用于登录 SMTP 服务器。在构造 Auth 对象时,我们需要传入 SMTP 登录账号和登录密码(或授权码),如下所示:

auth := smtp.PlainAuth("", "your_email@example.com", "your_password_or_auth_code", "smtp.qq.com")

注意,PlainAuth 函数的第 1 个参数为空字符串,表示采用普通方式登录 SMTP 服务器。

接着,构造电子邮件消息体,包括邮件主题、发件人、收件人、邮件内容等信息:

from := "your_email@example.com" // 发件人邮箱地址
to := []string{"recipient@example.com"} // 收件人邮箱地址,多个收件人用逗号分隔
subject := "Test Email" // 邮件主题
body := "This is a test email." // 邮件内容

// 构造 MIME 消息
message := []byte("To: " + strings.Join(to, ",") + "\r\n" +
    "Subject: " + subject + "\r\n" +
    "\r\n" +
    body + "\r\n")

在构造 MIME 消息时,我们需要注意几点:

  • To 头字段中,多个收件人地址之间需要用逗号分隔。
  • 邮件主题和邮件内容需要用 \r\n 换行符分隔,并且位于头部和正文之间会有一个空行。

最后,利用 smtp.SendMail() 函数发送邮件:

err := smtp.SendMail("smtp.qq.com:465", auth, from, to, message)
if err != nil {
    panic(err)
}

这里的 SendMail() 函数需要传入 SMTP 服务器的地址和端口号、Auth 对象、发件人邮箱地址、收件人邮箱地址列表、MIME 消息体等参数。

完整代码
import (
    "net/smtp"
    "strings"
)

func main() {
    auth := smtp.PlainAuth("", "your_email@example.com", "your_password_or_auth_code", "smtp.qq.com")
    from := "your_email@example.com"
    to := []string{"recipient@example.com"}
    subject := "Test Email"
    body := "This is a test email."
    message := []byte("To: " + strings.Join(to, ",") + "\r\n" +
        "Subject: " + subject + "\r\n" +
        "\r\n" +
        body + "\r\n")
    err := smtp.SendMail("smtp.qq.com:465", auth, from, to, message)
    if err != nil {
        panic(err)
    }
}
总结

本文介绍了在 Golang 中使用标准库中的 net/smtp 包发送电子邮件的方法,包括准备工作、代码实现和注意事项等内容。利用这种方法,我们可以很方便地实现邮件发送功能,为我们的应用增加更多实用价值。