Go使用gomail发送邮件详解,及使用smtp、email发送邮件

Go使用gomail发送邮件详解,及使用smtp、email发送邮件,第1张

 1、使用gopkg.in/gomail.v2发送邮件

1.1 先安装gomail包

go get -v gopkg.in/gomail.v2

实现代码如下:

package main

import (
	"crypto/tls"
	"fmt"

	"gopkg.in/gomail.v2"
)

func main() {
	test1()
}

func test1() {
	message := `
    

Hello %s,

test test test test test test test test test test test test.

test test test test test test test test test test test test.

test test test test test test test test test test test test.

Best Wishes!

` // QQ 邮箱: // SMTP 服务器地址:smtp.qq.com(SSL协议端口:465/994 | 非SSL协议端口:25) // 163 邮箱: // SMTP 服务器地址:smtp.163.com(端口:25) host := "smtp.qq.com" port := 25 userName := "******@qq.com" password := "**********" m := gomail.NewMessage() m.SetHeader("From", userName) // 发件人 // m.SetHeader("From", "alias"+"<"+userName+">") // 增加发件人别名 m.SetHeader("To", "******@qq.com", "******@qq.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接 m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个 m.SetHeader("Bcc", "******@qq.com") // 暗送,可以多个 m.SetHeader("Subject", "Hello!") // 邮件主题 // text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。 // 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等 m.SetBody("text/html", fmt.Sprintf(message, "testUser")) // text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理 // m.SetBody("text/plain", "纯文本") // m.Attach("test.sh") // 附件文件,可以是文件,照片,视频等等 // m.Attach("lolcatVideo.mp4") // 视频 // m.Attach("lolcat.jpg") // 照片 d := gomail.NewDialer( host, port, userName, password, ) // 关闭SSL协议认证 d.TLSConfig = &tls.Config{InsecureSkipVerify: true} if err := d.DialAndSend(m); err != nil { panic(err) } }

1.2、创建一个Message实例,Message提供了整个邮件协议内容的构建,默认实例采用UTF-8字符集和Quoted-printable编码。

	m := gomail.NewMessage()

1.3、设置发件人

	m.SetHeader("From", userName) // 发件人
	// m.SetHeader("From", "test"+"<"+userName+">") // 增加发件人别名

如果你觉得发件人只是一个邮箱名称,让你不好识别发件人是谁,这时可以通过注释行来设置发件人的别名,"test"即是发件人的别名名称。

1.4、设置收件人、抄送、暗送

// 收件人,可以多个收件人
	mailTo := []string{
		"******@qq.com",
		"******@qq.com",
	}
	m.SetHeader("To", mailTo...)

	// m.SetHeader("To", "******@qq.com", "******@qq.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
	m.SetHeader("Cc", "******@qq.com")                  // 抄送,可以多个
	m.SetHeader("Bcc", "******@qq.com")                 // 暗送,可以多个

可以通过数组设置多个收件人、抄送和暗送,或者和注释行一样使用逗号分开

1.5、设置邮件内容

	// text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
	// 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等
	m.SetBody("text/html", fmt.Sprintf(message, "testUser"))

	// text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理
	// m.SetBody("text/plain", "纯文本")

"text/plain"文本格式:text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理;

"text/html"文本格式:text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。可以通过 text/html 对文本格式进行特殊处理,如换行、缩进、加粗等等

1.6、设置附件

	m.Attach("test.sh") // 附件文件,可以是文件,照片,视频等等
	// m.Attach("lolcatVideo.mp4") // 视频
	// m.Attach("lolcat.jpg") // 照片

附件可以为文件、视频、照片等等

1.6.1、通过gomail.Rename()方法设置附件的别名

m.Attach(url, gomail.Rename(path.Base(file_name)))

1.6.2、在起别名的时候,如果别名中存在中文时可能会出现乱码:

m.Attach(url, gomail.Rename(mime.QEncoding.Encode("UTF-8", path.Base(file_name))))

通过mime.QEncoding.Encode()设置格式为UTF-8,防止乱码。

1.6.3、将邮件内容格式更改为Base64编码

    m := gomail.NewMessage(
        gomail.SetEncoding(gomail.Base64),
    )

1.7、创建SMTP客户端,连接到远程的邮件服务器

    host := "smtp.qq.com"
	port := 25
	userName := "******@qq.com"
	password := "**********" // qq邮箱填授权码
	d := gomail.NewDialer(
		host,
		port,
		userName,
		password,
	)

1.7.1、QQ授权码获取方式:

出于邮箱安全的考虑,很多邮箱缺省是关闭 POP3/SMTP 服务的,需要登录邮箱设置后开启。

以 QQ 邮箱为例,进入邮箱“设置”,在“帐户”项里就可找到“POP3/SMTP服务”的设置项,进行开启。

温馨提示:登录第三方客户端时,密码框请输入“授权码”进行验证。

也就是说,在使用 QQ 邮箱发送邮件的时候,需要使用授权码,而不是 QQ 密码!

1.7.2、常用邮箱信息

邮箱类型SMTP 服务器地址SSL协议端口非SSL协议端口
QQ 邮箱smtp.qq.com465/58725
163 邮箱smtp.163.com465/99425
office365 邮箱smtp.office365.com465/58725

1.8、关闭TLS认证:

d.TLSConfig = &tls.Config{InsecureSkipVerify: true}

设置为true时,关闭TLS认证,否则默认开启,需要配置证书认证,稍微麻烦一些。

1.9、测试效果如下:

2、使用 github.com/jordan-wright/email 和 "net/smtp" 发送邮件,用QQ邮件为发件人为例:

func emailTest() {
	host := "smtp.qq.com"
	port := "25"
	userName := "*****@qq.com"
	password := "******" // qq邮箱填授权码

	e := &email.Email{
		To:      []string{"******@qq.com", "******[email protected]"},
		From:    userName,
		Subject: "Email Send Test",
		Text:    []byte("Text Body is, of course, supported!"),
		HTML:    []byte("This a test email"),
		Headers: textproto.MIMEHeader{},
	}

	err := e.Send(host+port, smtp.PlainAuth("", userName, password, host))
	if err != nil {
		panic(err)
	}
}

2.1、测试效果如下:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/989984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存