发送邮件是实际业务中经常会用到的一个功能,而在Go语言中实现发送邮件的库也有很多,这篇文章将介绍go语言中如何发邮件 。
1. 登录QQ邮箱,选择账户,开启POP3/SMTP服务和IMAP/SMTP服务,并生成授权码

文章插图
2. 使用go语言的smtp包发送邮件
- go_emAIl/email.go
func SendEduEmail(user, password, host, to, subject, body, mailtype string) error {
hp := strings.Split(host, ":")
auth := smtp.PlainAuth("", user, password, hp[0])
var content_type string
if mailtype == "html" {
content_type = "Content-Type: text/" + mailtype + "; charset=UTF-8"
} else {
content_type = "Content-Type: text/plain" + "; charset=UTF-8"
}
msg := []byte("To: " + to + "rnFrom: " + user + ">rnSubject: " + subject + "rn" + content_type + "rnrn" + body)
send_to := strings.Split(to, ";")
err := smtp.SendMail(host, auth, user, send_to, msg)
return err
}
- main.go
import (
"fmt"
)
func main() {
send_email_test1()
}
iunc send_email_test1() {
var to = []string{"15735177116@163.com", "201800910862@b.sxmu.edu.cn"}
from := "1271570224@qq.com"
nickname := "张亚飞"
secret := "xxxxxxxx"
host := "smtp.qq.com"
port := 25
subject := "Perfect Vue Admin 发送邮件测试"
body := "测试内容"
if err := go_email.SendEmail(from, to, secret, host, nickname, subject, body, port, true); err != nil{
fmt.Println("发送失败: ", err)
}else {
fmt.Println("发送成功")
}
}
3. 使用"jordan-wright/email"发送邮件关键参数// Email is the type used for email messages
type Email struct {
ReplyTo []string
From string
To []string
Bcc []string
Cc []string
Subject string
Text []byte // Plaintext message (optional)
HTML []byte // Html message (optional)
Sender string // override From as SMTP envelope sender (optional)
Headers textproto.MIMEHeader
Attachments []*Attachment
ReadReceipt []string
}
- From:发件人邮箱,格式为“名称+<邮箱>”,也可以直接写邮箱,默认显示的发件人为@符号前的名称
- To:收件人邮箱地址
- Subject:邮件标题
- Text:邮件正文
1
e.Send("smtp.163.com:25", smtp.PlainAuth("", "pingyeaa@163.com", "<你的密码>", "smtp.163.com"))
smtp.PlainAuth
- 参数1:通常,identity应该是空字符串,以用作用户名 。
- 参数2:用户邮箱
- 参数3:密码,如果拿到了授权码,则填写授权码
- 参数4:服务器地址,163的地址是smtp.163.com,其他平台可自行查看
e := email.NewEmail()
e.Cc = []string{"xxxxxxx@qq.com"}
e.Bcc = []string{"xxxxxxx@qq.com"}
另一种初始化方式可以实例化的时候直接赋值
e := &email.Email{
From: "平也 <pingyeaa@163.com>",
To: []string{"xxxxxxx@qq.com"},
Subject: "发现惊天大秘密!",
Text: []byte("平也好帅好有智慧哦~"),
}
发送附件发送附件非常简单,直接传入文件名即可
e.AttachFile("attachment.txt")
连接池由于频繁发送邮件会不断的与SMTP服务器建立连接,比较影响性能,所以email提供了连接池的功能
auth := smtp.PlainAuth("", "pingyeaa@163.com", "<你的密码>", "smtp.163.com")
p, _ := email.NewPool("smtp.163.com:25", 4, auth)
创建成功后,就可以借助连接池来发送邮件
e := email.NewEmail()
e.From = "平也 <pingyeaa@163.com>"
e.To = []string{"xxxxxx@qq.com"}
e.Subject = "发现惊天大秘密!"
e.Text = []byte("平也好帅好有智慧哦~")
推荐阅读
- word2007向程序发送命令时出现问题 word向程序发送命令时出现问题怎么办
- 曝福原爱常受江宏杰的语言暴力!婆婆形容她是能下蛋的鸡,剧情又反转
- 华为手机如何发送短信 手机如何发送短信
- 网络语言母鸡的意思 母鸡的意思
- 自然语言处理现如今面临着哪些挑战呢
- 6种流行的前端开发语言
- 新手适合学的四种编程语言,你pick哪一个?
- 深度NLP模型的泛化问题
- 深度学习和自然语言处理新泛化方法Work Shop
- 从语言模型到多模态,AI大模型如何当好“人类助手”引热议
