代码 go发送邮件代码

2024-11-18 18:30:31 +0800 CST views 802

该代码实现了一个简单的邮件发送功能,使用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)
		}
	}()
}

推荐文章

mysql 计算附近的人
2024-11-18 13:51:11 +0800 CST
html夫妻约定
2024-11-19 01:24:21 +0800 CST
Golang 随机公平库 satmihir/fair
2024-11-19 03:28:37 +0800 CST
Go语言中的`Ring`循环链表结构
2024-11-19 00:00:46 +0800 CST
Gin 与 Layui 分页 HTML 生成工具
2024-11-19 09:20:21 +0800 CST
Rust 高性能 XML 读写库
2024-11-19 07:50:32 +0800 CST
MySQL 主从同步一致性详解
2024-11-19 02:49:19 +0800 CST
浅谈CSRF攻击
2024-11-18 09:45:14 +0800 CST
基于Webman + Vue3中后台框架SaiAdmin
2024-11-19 09:47:53 +0800 CST
windows安装sphinx3.0.3(中文检索)
2024-11-17 05:23:31 +0800 CST
PHP中获取某个月份的天数
2024-11-18 11:28:47 +0800 CST
Shell 里给变量赋值为多行文本
2024-11-18 20:25:45 +0800 CST
Nginx 实操指南:从入门到精通
2024-11-19 04:16:19 +0800 CST
File 和 Blob 的区别
2024-11-18 23:11:46 +0800 CST
H5保险购买与投诉意见
2024-11-19 03:48:35 +0800 CST
php获取当前域名
2024-11-18 00:12:48 +0800 CST
markdowns滚动事件
2024-11-19 10:07:32 +0800 CST
快速提升Vue3开发者的效率和界面
2025-05-11 23:37:03 +0800 CST
Python 获取网络时间和本地时间
2024-11-18 21:53:35 +0800 CST
Go语言中的mysql数据库操作指南
2024-11-19 03:00:22 +0800 CST
JavaScript中设置器和获取器
2024-11-17 19:54:27 +0800 CST
20个超实用的CSS动画库
2024-11-18 07:23:12 +0800 CST
CSS 实现金额数字滚动效果
2024-11-19 09:17:15 +0800 CST
Python上下文管理器:with语句
2024-11-19 06:25:31 +0800 CST
使用Python实现邮件自动化
2024-11-18 20:18:14 +0800 CST
Golang 中应该知道的 defer 知识
2024-11-18 13:18:56 +0800 CST
程序员茄子在线接单