当前位置: 首页 > news >正文

使用Golang调用腾讯云邮件模版发送邮件

文章目录

  • 一、腾讯云邮件模版创建
    • 1.1 发信域名配置
    • 1.2 发信地址设置
    • 1.3 发信模版设置
  • 二、通过Golang发送邮件
    • 2.1 代码示例
    • 2.2 代码说明
  • 三、常见问题
    • 3.1 UnsupportedRegion
    • 3.2 InvalidTemplateID

本文档介绍了如何使用Golang编写代码,通过腾讯云邮件服务(SES)发送带有模版的邮件。本示例将展示如何设置并发送带有参数的验证码邮件。

一、腾讯云邮件模版创建

1.1 发信域名配置

  1. 登录腾讯云控制台
    访问 腾讯云控制台,并使用您的腾讯云账号进行登录。

  2. 进入邮件推送服务
    在控制台左侧导航栏中,选择“邮件推送”,进入邮件推送服务管理页面。

  3. 添加发信域名
    在邮件推送管理页面中,找到并点击“域名管理”,然后点击“添加域名”。输入您想要设置为发信域名的域名,并提交。

如果填入的域名是 sampledomain.com 形式,这属于主域名;如果填入的域名是 abc.sampledomail.com 形式,这属于非主域名,是否使用主域名发信,在DNS下面的配置中有存在差异

差异:
如果发信域名非主域名,例如:abc.sampledomain.com,主机记录中填入:_dmarc.abc。
DMARC 记录中必须含有 v 与 p 标记。如果您对 DMARC 有更多的了解,可根据您的需要添加其他标记或修改标记的值。

  1. 获取DNS记录
    添加域名后,系统会生成一组需要配置的DNS记录,包括SPF、DKIM和MX记录。这些记录通常包括:

  2. 配置DNS记录
    根据腾讯云提供的DNS记录说明,在DNS服务提供商的控制台中添加相应的记录。通常需要添加以下记录:

添加SPF记录
记录类型:TXT
主机记录:@
记录值:根据腾讯云邮件推送提供的SPF记录值(v=spf1 include:qcloudmail.com ~all	)添加DKIM记录
记录类型:TXT
主机记录:一般为 dkim._domainkey 或者 (qcloud._domainkey	) 邮件推送服务提供的指定值 (qcloud._domainkey)
记录值:根据腾讯云邮件推送提供的DKIM记录值 (v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBQQUAA4GNADCBiQKBgQCxjYkKZlEUidvb7aBtt425JHzFvWbE8UeADjZRDKtiGlOn2HyK+4I072tIaM5F1azN9QIkveD/0iwOdDFvxqDffc3UEvRAVv7xcaR3tYoeK0WanlYtBuZopBFgZL3jR193hsGRa8ndh0XyJmZP/Kz4c6Z9lvQHeZsVCuHebXzsZwIDAQAB	)添加MX记录
记录类型:MX
主机记录:@
记录值:根据腾讯云邮件推送提供的MX记录值 (mxbiz1.qq.com.)
优先级:通常为10添加 DMARC 记录:
主机记录中填入:_dmarc
记录类型选择:TXT
记录值中填入:v=DMARC1; p=none

以上信息在域名添加的地方,点击 验证 就会出现相关的DNS解析设置

1.2 发信地址设置

进入新建发信地址配置,请选择发信域名,填入邮箱前缀和发件人别名后,单击提交即可完成保存。

注:每个域名仅支持配置10个发信地址。

1.3 发信模版设置

进入新建发信模板配置,填入模板名称,选择对应的模板类型,上传邮件正文,您可以单击预览看效果,最后单击提交即可完成保存。

模板类型中,分为 HTML 富文本和纯文本,

HTML支持更多样式,可呈现丰富的内容,后者仅支持文字,可根据需求选择。

邮件内容中的变量使用{{变量名}}表示,如:尊敬的{{name}}。在普通发送中使用的模板仅支持单一变量,在批量发送中使用的模板支持设置多个变量。

二、通过Golang发送邮件

完成模板创建后,可以使用Golang代码发送邮件。以下是详细代码:

2.1 代码示例

package mainimport ("fmt""log"v20201002 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002""github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common""github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
)func main() {// 替换为腾讯云账户的 SecretId 和 SecretKeysecretId := "your-secret-id"secretKey := "your-secret-key"// 替换为邮件模板 IDtemplateId := uint64(12345) // 示例模板ID,请确保正确填写// 替换为您的发件人邮箱和收件人邮箱sender := "sender@example.com"recipient := "recipient@example.com"// 模板参数nowDate := "2024-05-16"veryCode := "123456"// 初始化凭证对象credential := common.NewCredential(secretId,secretKey,)// 设置客户端配置cpf := profile.NewClientProfile()cpf.HttpProfile.Endpoint = "ses.tencentcloudapi.com"// 初始化 SES 客户端client, err := ses.NewClient(credential, "ap-beijing", cpf)if err != nil {log.Fatalf("Failed to initialize SES client: %v", err)}// 创建发送邮件请求对象request := ses.NewSendEmailRequest()request.FromEmailAddress = common.StringPtr(sender)request.Destination = common.StringPtrs([]string{recipient})// 设置模板参数template := ses.Template{}template.TemplateID = common.Uint64Ptr(templateId)template.TemplateData = common.StringPtr(fmt.Sprintf(`{"nowDate":"%s","veryCode":"%s"}`, nowDate, veryCode))request.Template = &template// 设置邮件主题request.Subject = common.StringPtr("Your verification code")request.ReplyToAddresses = common.StringPtr(sender)// 发送邮件response, err := client.SendEmail(request)if err != nil {log.Fatalf("Failed to send email: %v", err)}fmt.Printf("Email sent successfully: %s\n", response.ToJsonString())
}

2.2 代码说明

  • SecretId 和 SecretKey:替换为腾讯云账户的实际值。
  • 模板ID:替换为在腾讯云控制台中获取的模板ID。
  • 发件人和收件人邮箱:替换为实际的发件人和收件人邮箱地址。
  • 模板参数:根据需要替换模板参数的实际值。

三、常见问题

3.1 UnsupportedRegion

如果收到UnsupportedRegion错误,请确认选择的区域支持SES服务。常见支持SES的区域包括ap-beijing, ap-shanghai, ap-guangzhou, ap-singapore等。

3.2 InvalidTemplateID

如果收到InvalidTemplateID错误,请确认:

  • 模版ID正确无误。
  • 模版已通过审核并启用。

参考文档:

  • 腾讯云邮件推送设置文档:https://cloud.tencent.com/document/product/1288/55193
  • 腾讯云邮件推送常见问题文档:https://cloud.tencent.com/document/product/1288/60652
  • 腾讯云邮件推送API文档:https://cloud.tencent.com/document/product/1288/51061
  • 腾讯云邮件推送API 错误码:https://cloud.tencent.com/document/product/1288/51060

相关文章:

  • SpringCloud学习笔记(一)
  • 日有所思的梦想
  • 探索python数据可视化的奥秘:打造专业绘图环境
  • 【全开源】JAVA情侣扭蛋机情侣游戏系统源码支持微信小程序+微信公众号+H5
  • Oracle中rman的增量备份使用分享
  • vue3 前端实现导出下载pdf文件
  • AI实时免费在线图片工具3:人物换脸、图像编辑
  • Nginx企业级负载均衡:技术详解系列(15)—— 一篇文章教你如何自定义错误日志
  • 【C++】问题及补充(2)
  • LeetCode 每日一题 数学篇 2894.分类求和并作差
  • React 组件通信
  • 企业文件加密:保障知识产权与客户隐私
  • 【微服务】docker部署redis,一主二从三哨兵,读写分离
  • Golang | Leetcode Golang题解之第119题杨辉三角II
  • 【设计模式深度剖析】【5】【结构型】【桥接模式】| 以电视和遥控器为例加深理解
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【翻译】babel对TC39装饰器草案的实现
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Bootstrap JS插件Alert源码分析
  • eclipse的离线汉化
  • Invalidate和postInvalidate的区别
  • Java到底能干嘛?
  • JS专题之继承
  • Laravel Telescope:优雅的应用调试工具
  • Linux后台研发超实用命令总结
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • SOFAMosn配置模型
  • Zsh 开发指南(第十四篇 文件读写)
  • 闭包--闭包之tab栏切换(四)
  • 将 Measurements 和 Units 应用到物理学
  • 讲清楚之javascript作用域
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 老板让我十分钟上手nx-admin
  • 判断客户端类型,Android,iOS,PC
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 入门到放弃node系列之Hello Word篇
  • 使用parted解决大于2T的磁盘分区
  • 应用生命周期终极 DevOps 工具包
  • 用jquery写贪吃蛇
  • gunicorn工作原理
  • 仓管云——企业云erp功能有哪些?
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​iOS安全加固方法及实现
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​VRRP 虚拟路由冗余协议(华为)
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • ## 基础知识
  • #if等命令的学习
  • $(selector).each()和$.each()的区别
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (层次遍历)104. 二叉树的最大深度
  • (二) 初入MySQL 【数据库管理】