Golang net.smtp 包详解
net/smtp
包提供了一个简单的SMTP(简单邮件传输协议)客户端,用于发送电子邮件。以下是一个使用 net/smtp
包发送电子邮件的示例代码:
package main
import (
"crypto/tls"
"fmt"
"net"
"net/smtp"
)
func main() {
// 设置 SMTP 服务器和身份验证信息
smtpHost := "smtp.example.com"
smtpPort := "587"
auth := smtp.PlainAuth(
"",
"user@example.com",
"password",
smtpHost,
)
// 创建一个新的连接到 SMTP 服务器
conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%s", smtpHost, smtpPort), &tls.Config{})
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
defer conn.Close()
client, err := smtp.NewClient(conn, smtpHost)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
// 身份验证
if auth != nil {
if ok, mech := client.Auth(auth); !ok {
fmt.Printf("Authentication failed using %v\n", mech)
return
}
}
// 设置邮件的发送地址和接收地址
if err := client.Mail("user@example.com"); err != nil {
fmt.Printf("Mail: %v\n", err)
return
}
if err := client.Rcpt("recipient@example.com"); err != nil {
fmt.Printf("Rcpt: %v\n", err)
return
}
// 准备邮件内容
w, err := client.Data()
if err != nil {
fmt.Printf("Data: %v\n", err)
return
}
msg := `To: recipient@example.com
Subject: SMTP Email Test
Hello, this is a test email sent using Go's SMTP client.`
_, err = w.Write([]byte(msg))
if err != nil {
fmt.Printf("Write: %v\n", err)
return
}
// 关闭 writer,发送邮件
err = w.Close()
if err != nil {
fmt.Printf("Close: %v\n", err)
return
}
// 结束邮件发送并关闭客户端
err = client.Quit()
if err != nil {
fmt.Printf("Quit: %v\n", err)
return
}
fmt.Println("Email sent successfully!")
}
这段代码演示了如何使用 net/smtp
包发送一封简单的电子邮件。需要注意的是,SMTP服务器的地址、端口、用户名和密码需要根据实际情况进行替换。此外,邮件内容应该是符合SMTP邮件格式的文本。
评论已关闭