Go实现发送电子邮件

目录

前言

获取授权码

使用Go原生smtp包发送邮件

所需导入包

身份、发送者和密码

stmp域名和端口

接收者切片

发送者名称

标题和正文

生成授权

指定上下文类型

拼接发送消息和url

发送邮件

发送邮件实测

使用第三方包----gomail

gomail简单介绍

获取gomail

生成gomail message

设置发件人信息

设置收件人信息

设置抄送者信息

设置密送者信息

设置邮件主题

书写正文内容

添加附件

设置拨号器

🚀发送邮件~


前言

Go原生包net/smtp可以实现基本的发送邮件功能。Go的第三方包gomail可以实现更多的发送功能。下面来一一介绍。

 

获取授权码

部分邮箱(例如QQ邮箱)发送邮件时,使用的不是密码,而是授权码。授权码的获取方式(以QQ邮箱为例)如下:

获取QQ邮箱的授权码

 

使用Go原生smtp包发送邮件

所需导入包

需要使用 net/smtp 包

import (
    "net/smtp"
)

 

身份、发送者和密码

identity := ""
sender := "[email protected]"
pwd := "lzffxekpzhuazsfeagb2"

⚠️发送者sender必须是合法有效的邮箱。有些邮箱发送时需要的是授权码,而非密码。因此需要将pwd的值替换为授权码。

 

stmp域名和端口

host :="smtp.qq.com"
port := "25"

使用QQ邮箱作为发送者邮箱时,域名和端口如上配置。

 

接收者切片

可以一次性发送给多个用户:

sendTo:=[]string{"[email protected]", "[email protected]"}

 

发送者名称

senderName := "TCatTime"

定义邮件发送者的名字。

 

标题和正文

title := "have a nice day"
body := "test8.0"

定义邮件的标题和正文内容。

 

生成授权

调用smtp包中的PlainAuth函数,生成授权。

auth := smtp.PlainAuth(identity, sender, pwd, host)

 

指定上下文类型

content_type := "Content-Type: text/html; charset=UTF-8"

 

拼接发送消息和url

msg := []byte("To: " + strings.Join(sendTo, ",",) + "\nFrom: " + senderName +
		"<" + sender + ">\nSubject: " + title + "\n" + content_type + "\n" + body + "\n")

url := host + ":" + port

 

发送邮件

err := smtp.SendMail(url, auth, sender, sendTo, msg)
if err != nil {
	fmt.Printf("\n\nsend mail error: %v", err)
	return
}
fmt.Println("\n\nsend mail success!")

 

发送邮件实测

 

使用第三方包----gomail

gomail简单介绍

gomail框架对go原生的smtp包做了一层封装,使用更直观、简便。且gomail可以更方便的发送带有附件的邮件、添加抄送者等。

 

获取gomail

1、使用go-get获取

github.com/go-gomail/gomail

2、使用go-mod获取

进入项目目录下

go mod tidy

 

生成gomail message

m := gomail.NewMessage()

 

设置发件人信息

m.SetAddressHeader("From", "[email protected]", "发件人")

 

设置收件人信息

m.SetHeader("To",
	m.FormatAddress("[email protected]", "收件人"))

 

设置抄送者信息

m.SetHeader("Cc",
	m.FormatAddress("[email protected]", "收件人1"),
	m.FormatAddress("[email protected]", "收件人2"))

 

设置密送者信息

m.SetHeader("Bcc",
	m.FormatAddress("[email protected]", "收件人1"),
	m.FormatAddress("[email protected]", "收件人2"))

 

设置邮件主题

m.SetHeader("Subject", "go-mail测试")

SetHeader方法的第一个参数表示邮件标题(Subject),第二个参数表示邮件主题(go-mail测试)。

 

书写正文内容

m.SetBody("Content-Type: text/html; charset=UTF-8", "go-mail")

SetBody()方法的第一个参数表示正文内容的类型和默认的编码格式。第二个参数是正文内容。

 

添加附件

m.Attach("/Users/root/Desktop/demo.docx")

使用Attach()方法添加一个附件到邮件中。附件的路径为服务器端的绝对路径。

 

设置拨号器

发送邮件的最后一项准备工作是设置拨号器。使用NewDialer()函数生成一个拨号器。将邮件服务器、端口、发送者邮箱、密码(或授权码)依次传入NewDialer()函数中。以QQ邮箱为例:

d := gomail.NewDialer("smtp.qq.com", 25, "[email protected]", "lzfxkkpzuasfeagz")

 

🚀发送邮件~

最后一步,发送!

err := d.DialAndSend(m)
if err != nil {
    fmt.Println("send mail error:", err.Error())
    return
}

fmt.Println("Send mail finished!")

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章