在学习go语言的过程中,发现smtp邮件服务也在go语言的标准库中支持,所以写了一个小demo测试是否能够真的发送邮件,代码如下:
package main
import (
"crypto/tls"
"log"
"net/smtp"
)
const (
smtpServer = "smtp.163.com" // smtp服务器地址
account = "xxxxxxxxxx" // 邮箱账号
password = "xxxxxxxxxx" // 邮箱密码
addressee = "xxxxxxxxxx" // 收件人
)
func main() {
// 创建smtp客户端
clinet, err := smtp.Dial(smtpServer + ":25")
if err != nil {
log.Fatal("创建smtp客户端:", err)
}
// 使用TLS加密连接
if err = clinet.StartTLS(&tls.Config{ServerName: smtpServer}); err != nil {
log.Fatal("使用TLS加密连接:", err)
}
// 验证账号密码是否有效
auth := smtp.PlainAuth("", account, password, smtpServer)
if err = clinet.Auth(auth); err != nil {
log.Fatal("验证账号密码是否有效:", err)
}
// 设置发送人
if err = clinet.Mail(account); err != nil {
log.Fatal("设置发送人:", err)
}
// 设置接收人
if err = clinet.Rcpt(addressee); err != nil {
log.Fatal(err)
}
// 创建客户端输入对象
writerObject, err := clinet.Data()
if err != nil {
log.Fatal(err)
}
_, err = writerObject.Write([]byte("To:" + addressee + "\r\n" +
"Subject:这是一个礼物:)\r\n" +
"\r\n" +
"这是一封测试邮件,旨在测试使用go语言发送基于smtp服务器的邮件"))
if err != nil {
log.Fatal(err)
}
// 关闭客户端输入对象
if err = writerObject.Close(); err != nil {
log.Fatal(err)
}
clinet.Quit()
}
在实现过程中发现有的smtp服务器必须要求连接传输的数据必须加密,不然不让传输,所以在发送邮件前必须先开启TLS加密,经过测试确实可以成功发送邮件:)
标签:clinet,log,err,nil,smtp,发送,go,Fatal,邮件 From: https://www.cnblogs.com/sdusk/p/17488107.html