go语言发送邮件

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

go语言发送邮件

文章插图

 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
package main
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:邮件正文
调用Send方法发送邮件,第一个参数是你的发件人邮箱的SMTP域名+端口号,第二个参数用于身份认证
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,其他平台可自行查看
CC与BCCCC全称是Carbon Copy,意为抄送,BCC全称Blind Carbon Copy,意为暗抄送,收件人看不到被暗抄送给了谁 。
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("平也好帅好有智慧哦~")


推荐阅读