Go发送电子邮件

本文介绍了如何使用Go原生的`net/smtp`包和第三方库`gomail`发送电子邮件。内容包括获取授权码、使用Go原生smtp包的步骤,如设置发送者、接收者、标题和正文,以及使用gomail进行更便捷的邮件发送,如添加附件和设置抄送、密送等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

获取授权码

使用Go原生smtp包发送邮件

所需导入包

身份、发送者和密码

stmp域名和端口

接收者切片

发送者名称

标题和正文

生成授权

指定上下文类型

拼接发送消息和url

发送邮件

发送邮件实测

使用第三方包----gomail

gomail简单介绍

获取gomail

生成gomail message

设置发件人信息

设置收件人信息

设置抄送者信息

设置密送者信息

设置邮件主题

书写正文内容

添加附件

设置拨号器

🚀发送邮件~


前言

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

获取授权码

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

使用Go原生smtp包发送邮件

所需导入包

需要使用 net/smtp 包

import (
    "net/smtp"
)

身份、发送者和密码

identity := ""
sender := "tcattime@qq.com"
pwd := "lzffxekpzhuazsfeagb2"

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

stmp域名和端口

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

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

接收者切片

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

sendTo:=[]string{"tester@qq.com", "cat@huawei.com"}

发送者名称

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", "a@qq.com", "发件人")

设置收件人信息

m.SetHeader("To",
	m.FormatAddress("b@qq.com", "收件人"))

设置抄送者信息

m.SetHeader("Cc",
	m.FormatAddress("xxxx@foxmail.com", "收件人1"),
	m.FormatAddress("xxxx@foxmail.com", "收件人2"))

设置密送者信息

m.SetHeader("Bcc",
	m.FormatAddress("xxxx@gmail.com", "收件人1"),
	m.FormatAddress("xxxx@gmail.com", "收件人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, "demo@qq.com", "lzfxkkpzuasfeagz")

🚀发送邮件~

最后一步,发送!

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

fmt.Println("Send mail finished!")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值