1. 准备邮件内容
邮件内容通常包括发件人、收件人、邮件主题、邮件正文等信息。在Go中,邮件内容通常以明文形式提供,需要遵循一定的邮件格式规范。
2. 配置SMTP服务器
选择一个SMTP服务器来发送邮件。许多邮件服务提供商(如Google的Gmail、Microsoft的Outlook等)都提供了SMTP服务。你需要知道SMTP服务器的地址和端口号。
3.通过标准包net/smtp
package main
import (
"fmt"
"log"
"net/mail"
"net/smtp"
"strconv"
"strings"
)
func main() {
// 邮件发送者、接收者、SMTP服务器配置
fromAcc := "xxx@qq.com"
fromUser := "xxx"
password := "授权码" // 这不是你的邮箱密码,而是开启SMTP服务后获得的授权码
smtpServer := "smtp.qq.com"
smtpPort := 587 // 或465,具体取决于SMTP服务器配置
// 构建认证信息
auth := smtp.PlainAuth("", fromAcc, password, smtpServer)
// 收发件人信息
from := mail.Address{Name: fromUser, Address: fromAcc}
to := mail.Address{Name: "收件人名称", Address: "收件人邮箱"}
// 构建邮件头和正文
headers := make(map[string]string)
headers["From"] = from.String()
headers["To"] = to.String()
headers["Subject"] = "测试邮件"
headers["MIME-Version"] = "1.0"
headers["Content-Type"] = "text/plain; charset=UTF-8"
var headerBuffer strings.Builder
for k, v := range headers {
headerBuffer.WriteString(k + ": " + v + "\r\n")
}
headerBuffer.WriteString("\r\n") // 空行分隔邮件头和邮件体
body := "这是邮件的正文内容。"
message := headerBuffer.String() + body
// 发送邮件
err := smtp.SendMail(smtpServer+":"+strconv.Itoa(smtpPort),
auth,
fromAcc,
[]string{to.Address},
[]byte(message))
if err != nil {
log.Fatalf("发送邮件失败: %v", err)
}
fmt.Println("发送邮件成功!")
}
4.通过第三方包gomail
package main
import (
"crypto/tls"
"fmt"
"gopkg.in/gomail.v2"
"log"
)
func main() {
// 设置SMTP服务器配置
mailer := gomail.NewMessage()
mailer.SetHeader("From", "xxx@qq.com") // 发件人邮箱
mailer.SetHeader("To", "收件人邮箱") // 收件人邮箱
mailer.SetHeader("Subject", "邮箱测试")
mailer.SetBody("text/html", "邮件正文内容")
// QQ邮箱SMTP服务器配置
smtpHost := "smtp.qq.com"
smtpPort := 587 // 465或587,根据邮箱服务商和是否使用SSL/TLS选择端口
smtpUser := "xxx@qq.com"
smtpPass := "授权码" // 这不是你的邮箱密码,而是开启SMTP服务后获得的授权码
// 构建SMTP客户端
dialer := gomail.NewDialer(smtpHost, smtpPort, smtpUser, smtpPass)
dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true} // 忽略证书校验,仅用于测试环境
// 发送邮件
if err := dialer.DialAndSend(mailer); err != nil {
log.Fatal(err)
}
fmt.Println("邮件发送成功!")
}