使用go标准库发送邮件
在学习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加密,经过测试确实可以成功发送邮件:)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构