GO通过SMTP协议发送邮件

什么是SMTP协议

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送邮件的协议。当一个邮件服务器需要发送邮件给另一个邮件服务器时,它会使用SMTP协议与目标服务器建立连接,并传输邮件内容。SMTP协议的通信过程大致如下:

  1. 建立连接:发送服务器与目标服务器通过TCP/IP协议建立连接。默认情况下,SMTP服务器使用TCP端口25。

  2. 握手和身份验证:发送服务器与目标服务器进行握手,确认双方准备好进行通讯。握手过程中,发送服务器可能会提供身份验证信息,以确保身份的合法性。

  3. 发送邮件:发送服务器将邮件的源地址、目标地址、邮件内容等信息通过SMTP协议传输给目标服务器。通常情况下,邮件内容会经过编码和压缩,以减少传输的数据量。

  4. 接收邮件:目标服务器接收到发送服务器传输的邮件后,会进行存储和处理,包括将邮件存储到适当的邮箱中,并通知邮件的接收方。

  5. 断开连接:邮件传输完成后,发送服务器与目标服务器断开连接。

GO通过SMTP协议发送邮件

可以直接使用GO的"net/smtp"包来发送邮件

Go 复制代码
type EmailInfo struct {
	From        string   // 发件人邮箱
	FromAlias   string   // 发件人别名
	Password    string   // 发件人邮箱密码
	Host        string   // 邮件服务ip
	Port        int      // 邮件服务port
	To          []string // 收件人邮箱
	Cc          []string // 抄送邮箱
	Bcc         []string // 密送邮箱
	Subject     string   // 邮件主题
	Content     string   // 邮件内容
	ContentType string   // 邮件内容类型,html/string
}

// smtp发送邮件
func SmtpSend(email EmailInfo) error {
	// 认证信息
	auth := smtp.PlainAuth("", email.From, email.Password, email.Host)
	addr := fmt.Sprintf("%s:%d", email.Host, email.Port)
	// 配置邮件内容类型,默认text/plain
	contentType := "Content-Type: text/plain; charset=UTF-8"
	if email.ContentType == "html" {
		contentType = "Content-Type: text/html; charset=UTF-8"
	}

	msg := "To: " + strings.Join(email.To, ",") + "\r\n" +
		"From: " + email.FromAlias + "<" + email.From + ">\r\n" +
		"Subject: " + email.Subject + "\r\n" +
		"" + contentType + "\r\n\r\n" +
		"" + email.Content

	if err := smtp.SendMail(addr, auth, email.From, email.To, []byte(msg)); err != nil {
		fmt.Println("send failed:", err.Error())
		return err
	}

	return nil
}


func mail() {

    // 发送邮件信息
	data := EmailInfo{
		From:      "xxx", // 你的邮箱
		FromAlias: "xxx, // 你的发件人别名
		Password:  "xxx", // 你的邮箱密码
		Host:      "smtp.qiye.163.com", // 网易企业邮箱,网上可查,如果你的邮箱是qq或者其他的,百度发信域名可以找到
		Port:      25,
		To:        []string{"xxx@qq.com"},
		Cc:        []string{"xxx@qq.com"},
		Subject:   "邮件主题",
		Content:   `你的邮件内容`,
	}


	if err := SmtpSend(testData); err != nil {
		fmt.Println("smtp send failed:", err.Error())
		return
	}
	fmt.Println("send success")
}
相关推荐
徐同保1 小时前
tailwindcss暗色主题切换
开发语言·前端·javascript
蓝纹绿茶1 小时前
bash:**:pip:***python: 错误的解释器: 没有那个文件或目录
开发语言·python·pip
云知谷2 小时前
【经典书籍】C++ Primer 第15章类虚函数与多态 “友元、异常和其他高级特性” 精华讲解
c语言·开发语言·c++·软件工程·团队开发
START_GAME2 小时前
深度学习Diffusers:用 DiffusionPipeline 实现图像生成
开发语言·python·深度学习
不爱编程的小九九2 小时前
小九源码-springboot088-宾馆客房管理系统
java·开发语言·spring boot
thinktik3 小时前
AWS EKS安装S3 CSI插件[AWS 海外区]
后端·kubernetes·aws
Evand J3 小时前
【MATLAB例程】到达角度定位(AOA),平面环境多锚点定位(自适应基站数量),动态轨迹使用EKF滤波优化。附代码下载链接
开发语言·matlab·平面·滤波·aoa·到达角度
细节控菜鸡3 小时前
【2025最新】ArcGIS for JS 实现随着时间变化而变化的热力图
开发语言·javascript·arcgis
Pluto_CSND4 小时前
Java实现gRPC双向流通信
java·开发语言·单元测试
Yeats_Liao4 小时前
Go Web 编程快速入门 05 - 表单处理:urlencoded 与 multipart
前端·golang·iphone