该代码实现了一个简单的邮件发送功能,使用SMTP协议发送邮件。定义了EmailMessage结构体,包含收件人、抄送人、主题和邮件内容。通过SendEmail函数发送邮件,并在发送过程中处理错误。代码中还包含一个Goroutine用于消费邮件缓冲池中的邮件。配置参数通过conf包获取,确保邮件发送的安全性和有效性。
package SendEmail
import (
"CXOprojectfficial/conf"
logx "project/pkg/log"
"fmt"
"net/smtp"
"github.com/jordan-wright/email"
)
type EmailMessage struct {
To []string // 收件人的邮箱地址列表
Cc []string // 抄送人的邮箱地址列表
Subject string // 邮件主题
Text []byte // 邮件的纯文本内容
Html []byte // 邮件的HTML内容
}
var Emails chan EmailMessage = make(chan EmailMessage) //邮件缓冲池
func SendEmail(msg EmailMessage) (ok bool) {
defer func() {
if err := recover(); err != nil {
logx.Logger.Error.Error(err)
}
}()
// 简单设置 log 参数
em := email.NewEmail()
{
// 设置 sender 发送方 的邮箱 , 此处可以填写自己的邮箱
em.From = conf.Config.Email.From
// 设置 receiver 接收方 的邮箱 此处也可以填写自己的邮箱, 就是自己发邮件给自己
em.To = msg.To
// 设置主题
em.Subject = msg.Subject
// 设置抄送
em.Cc = msg.Cc
// 简单设置文件发送的内容,暂时设置成纯文本
em.Text = msg.Text
em.HTML = msg.Html
//设置服务器相关的配置
if msg.Html == nil {
em.HTML = []byte(fmt.Sprintf(conf.Config.Email.DefaulthHtml, msg.Text, conf.Config.RedisContext.EmailExpiration))
}
}
auth := smtp.PlainAuth(conf.Config.Email.Auth.Identity, conf.Config.Email.Auth.Username, conf.Config.Email.Auth.Password, conf.Config.Email.Auth.Host)
if err := em.Send(conf.Config.Email.Addr, auth); err != nil {
logx.Logger.Error.Error(err)
return false
}
logx.Logger.Info.Infof("%s send successfully ... ", msg.Text)
return true
}
func init() {
//邮件消费goroutine
go func() {
for email := range Emails {
SendEmail(email)
}
}()
}