email
在 Go 中发送电子邮件通常使用标准库 net/smtp 或第三方库(如 gomail、mail)。以下是几种常见的方法来实现发送电子邮件功能。
使用 net/smtp 发送电子邮件
Go 的标准库 net/smtp 提供了简单的邮件发送功能。以下是一个示例,演示如何使用它来发送电子邮件:
示例:使用 net/smtp 发送电子邮件
go
package main
import (
"fmt"
"net/smtp"
)
func sendEmail() {
// 邮件服务器配置
smtpServer := "smtp.gmail.com"
smtpPort := "587"
from := "your-email@gmail.com" // 发送方邮箱
password := "your-email-password" // 发送方邮箱的应用密码(推荐使用应用密码而不是邮箱密码)
to := []string{"recipient@example.com"} // 接收方邮箱
// 邮件内容
subject := "Subject: Test Email\n" // 邮件主题
body := "This is a test email from Go!" // 邮件正文
message := []byte(subject + "\n" + body)
// 设置身份验证信息
auth := smtp.PlainAuth("", from, password, smtpServer)
// 发送邮件
err := smtp.SendMail(smtpServer+":"+smtpPort, auth, from, to, message)
if err != nil {
fmt.Println("Failed to send email:", err)
return
}
fmt.Println("Email sent successfully!")
}
func main() {
sendEmail()
}解释:
- 配置 SMTP 服务器:你需要指定 SMTP 服务器的地址和端口(例如,Gmail 的 SMTP 服务器是
smtp.gmail.com,端口为 587)。 - 身份验证:
smtp.PlainAuth用于生成身份验证信息,输入发件人邮箱、密码(推荐使用应用密码)、SMTP 服务器地址。 - 邮件内容:
Subject设置邮件的主题,Body设置邮件的正文内容。 - 发送邮件:通过
smtp.SendMail发送邮件。
注意:
- 使用 Gmail 等提供商时,你需要使用应用密码(Google 账户的 2FA 开启时,不能使用主密码)。
- 如果你要通过 Gmail 发送邮件,记得在 Gmail 设置中开启 "低安全应用程序访问" 或使用 Gmail 的 OAuth 2.0 验证机制。
使用 gomail 库发送电子邮件
gomail 是一个流行的第三方库,提供了更高级和简便的电子邮件发送功能。它支持附件、HTML 内容等。
安装 gomail 库
bash
go get gopkg.in/gomail.v2示例:使用 gomail 发送电子邮件
go
package main
import (
"fmt"
"gopkg.in/gomail.v2"
)
func sendEmail() {
m := gomail.NewMessage()
m.SetHeader("From", "your-email@gmail.com")
m.SetHeader("To", "recipient@example.com")
m.SetHeader("Subject", "Test Email from gomail")
m.SetBody("text/plain", "This is a test email sent using gomail.")
d := gomail.NewDialer("smtp.gmail.com", 587, "your-email@gmail.com", "your-email-password")
// 发送邮件
if err := d.DialAndSend(m); err != nil {
fmt.Println("Failed to send email:", err)
return
}
fmt.Println("Email sent successfully!")
}
func main() {
sendEmail()
}解释:
gomail.NewMessage():创建一个新的邮件消息。SetHeader:设置邮件的各个头部(发件人、收件人、主题等)。SetBody:设置邮件正文,可以指定内容类型(text/plain或text/html)。gomail.NewDialer:创建一个新的 SMTP 连接器,传入 SMTP 服务器地址、端口、发件人邮箱和密码。DialAndSend:发送邮件。
使用 mail 库发送电子邮件
mail 是另一个第三方库,适合用于更复杂的邮件发送任务,支持附件、HTML 格式等。
安装 mail 库
bash
go get github.com/xhit/go-simple-mail/v2示例:使用 mail 库发送电子邮件
go
package main
import (
"fmt"
"github.com/xhit/go-simple-mail/v2"
)
func sendEmail() {
server := mail.NewSMTPClient()
// 配置 SMTP 服务器
server.Host = "smtp.gmail.com"
server.Port = 587
server.Username = "your-email@gmail.com"
server.Password = "your-email-password"
server.Encryption = mail.EncryptionSTARTTLS
// 创建邮件客户端
client, err := server.Connect()
if err != nil {
fmt.Println("Failed to connect to SMTP server:", err)
return
}
// 创建邮件
email := mail.NewMSG()
email.SetFrom("your-email@gmail.com").
AddTo("recipient@example.com").
SetSubject("Test Email").
SetBody(mail.TextPlain, "This is a test email sent using go-simple-mail.")
// 发送邮件
err = email.Send(client)
if err != nil {
fmt.Println("Failed to send email:", err)
return
}
fmt.Println("Email sent successfully!")
}
func main() {
sendEmail()
}解释:
mail.NewSMTPClient():创建一个新的 SMTP 客户端。SetFrom,AddTo,SetSubject,SetBody:设置邮件的发件人、收件人、主题和正文。email.Send(client):发送邮件。
总结
- 使用
net/smtp:适合简单的邮件发送,Go 标准库自带。 - 使用
gomail:功能强大且易于使用,支持更多功能,如 HTML 内容、附件等。 - 使用
go-simple-mail:功能丰富,支持不同的 SMTP 加密和更多配置,适用于更复杂的邮件发送需求。
根据需求选择适合的库,gomail 和 go-simple-mail 更适合处理复杂的邮件发送任务。