使用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加密,经过测试确实可以成功发送邮件:)

posted @   理性黄昏  阅读(146)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示