IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【go-zero】整合pongo2与jordan-wright email 实现email模板发送 (go实现email)best practice -> 正文阅读

[开发工具]【go-zero】整合pongo2与jordan-wright email 实现email模板发送 (go实现email)best practice

前言

首先我们看一下这个项目得整体的目录结构如下图:
在这里插入图片描述

一、配置文件

1、创建yaml

在rpc服务中etc配置中新建一组关于email的相关配置的yaml

# email 邮件校验配置
Email:
  # 模板位置
  Template: template/emailtemplate.html
  # 使用的smtp服务器地址
  Host: smtp-mail.outlook.com
  # 服务器 basic auth的验证
  Username: no-reply@xxx.com
  Password: xxxxxx
  Port: "587"
  # 发送此邮件的发件人
  FromEmail: no-reply@xxx.com
  # 协议
  Protocol: smtp-mail.outlook.com
  # 这里是需要跳转的前端的地址,业务不需要可以忽略
  Address: http://www.xxx.ca/

在这里插入图片描述

二、jordan-wright发送邮件核心方法

1、发送邮件核心方法

创建路径如图所示:
在这里插入图片描述

package email

import (
	"context"
	"crypto/tls"
	"git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/simbam-go-common.git/xerr"
	"git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/simbam-go-email.git/rpc/internal/common/module"
	"github.com/jordan-wright/email"
	"github.com/zeromicro/go-zero/core/logx"
)

type (
	EmailConfig struct {
		Host      string
		Username  string
		Password  string
		Port      string
		Protocol  string
		Address   string
		Template  string
		FromEmail string
	}
	SendmailClient interface {
		Sendmail(to []string, text []byte, subject string) error
	}
)

func NewEmail(email EmailConfig) SendmailClient {
	return &email
}

核心代码如下:
*这里稍微说明一点,就是当我们需要发送模板这种html需要渲染的文件时,要发送Html,如果只是文字传Text即可*
// Sendmail
// 	email 核心类
//	使用:https://github.com/jordan-wright/email
func (l *EmailConfig) Sendmail(to []string, text []byte, subject string) error {
	e := email.NewEmail()
	e.From = l.FromEmail // 由谁(的email)
	e.To = to            // 发给谁(的email)
	e.HTML = text        // 发送的内容
	e.Subject = subject  // 标题
	//e.Bcc = []string{"hao.zhu@simbainno.com"}
	//e.Cc = []string{"qi.huan@simbainno.com"} // 抄送
	//fmt.Println(e.From, e.To, e.Subject)
	addr := l.Host + ":" + l.Port
	auth := module.LoginAuth(l.Username, l.Password)
	tlsConfig := &tls.Config{
		ServerName: l.Host,
	}
	err := e.SendWithStartTLS(addr, auth, tlsConfig)
	if err != nil {
		logx.WithContext(context.Background()).Errorf(err.Error())
		return xerr.NewErrCode(xerr.EMAIL_SEND_ERROR)
	}
	return nil
}

三、创建template模板页面

1、html模板创建

这里截取一段模板html代码来做解释

<html>
 <head></head>
 <body>
  <p><font color="#333333"><span style="font-size:12px">
<span style="font-family:Helvetica, sans-serif"> {{ companyName }}</span></span></font> </p> 
  <p><font color="#333333"><span style="font-size:12px">
<span style="font-family:Helvetica, sans-serif">Email: {{email}}</span></span><br /><span style="font-size:12px">
<span style="font-family:Helvetica, sans-serif">Address: {{address|safe}}</span></span></font> </p>
 </body>
</html>

这里十分重要!!!!!
在模板中使用俩个花括号来设置为变量如:{{ 变量 }}
但是如果我们的变量里面也是含有html元素的时候这时候需要加上 safe的关键字

下面是官方说明的截图:

在这里插入图片描述
由于pango为 django的go版本,所以这个内容可以完全以如下文档为主
文档地址:Django 模板语言的文档地址

四、渲染 template模板

1、模板表(仅供参考)

CREATE TABLE `sys_email_template` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `site_id` bigint DEFAULT NULL,
  `brand` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `company_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `route` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `address` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `service_type` bigint DEFAULT NULL,
  `tel` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `context1` text COLLATE utf8mb4_general_ci,
  `context2` text COLLATE utf8mb4_general_ci,
  `is_del` datetime DEFAULT NULL,
  `create_at` datetime(3) DEFAULT NULL,
  `update_at` datetime(3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2、渲染html

从数据库中抽取模板数据渲染html
在这里插入图片描述

3、调用上面发送邮件方法

将组装好的数据,根据上面方法的入参传入即可完成发送
如下图:(发送成功图片)
在这里插入图片描述

五、拿来即用系列(email发送demo)

上面将整体的架构思路阐述清晰后,大家根据自己的业务进行相应的调整
下面给大家直接运行可用的demo
毕竟大多数人是懒得自己写的

package main

import (
	"crypto/tls"
	"fmt"
	"github.com/jordan-wright/email"
	"gomail/module"
)

func main() {
	e := email.NewEmail()
	e.From = "123@xx.com"  // 发送人
	e.To = []string{"123@xx.com"} //收件人
	e.Text = []byte("Text Body is, of course, supported!") // 如果是模板使用 html
	e.Subject = "hello" // 标题
	//e.Bcc = []string{"hao.zhu@simbainno.com"} // 抄送
	//e.Cc = []string{"qi.huan@simbainno.com"} // 抄送
	addr := "smtp-mail.outlook.com:端口" // smtp地址
	auth := module.LoginAuth("123@xx.com", "zxxxx") // basic auth 授权
	tlsConfig := &tls.Config{
		ServerName: "smtp-mail.outlook.com", // 保证和 addr的host一致
	}
	err := e.SendWithStartTLS(addr, auth, tlsConfig) // 发送
	if err != nil {
		fmt.Printf(err.Error())
	}

}

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:45:36  更:2022-03-08 22:47:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 17:19:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码