首页 > 其他分享 >使用Golang调用腾讯云邮件模版发送邮件

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

时间:2024-05-26 16:34:53浏览次数:29  
标签:记录 模版 Golang 域名 模板 腾讯 com 邮件

文章目录


本文档介绍了如何使用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 main

import (
    "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 和 SecretKey
    secretId := "your-secret-id"
    secretKey := "your-secret-key"
    
    // 替换为邮件模板 ID
    templateId := uint64(12345) // 示例模板ID,请确保正确填写
    
    // 替换为您的发件人邮箱和收件人邮箱
    sender := "[email protected]"
    recipient := "[email protected]"

    // 模板参数
    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

标签:记录,模版,Golang,域名,模板,腾讯,com,邮件
From: https://blog.csdn.net/cljdsc/article/details/139189311

相关文章

  • 使用树梅派搭建Golang、Python、NodeJs的开发服务器
    使用树梅派搭建Golang、Python、NodeJs的开发服务器安装系统安装rpi-imagersudoaptinstallrpi-imager打开rpi-imager烧写RaspberryPiOSLite(64-bit)系统设置好用户名、密码、wifi、ssh等信息上电修改镜像源备份/etc/apt/sources.listsudocp/etc/apt......
  • 电子邮件加密PGP(Pretty Good Privacy)浅聊
    邮件加密PGP(PrettyGoodPrivacyGPG(PrettyGoodPrivacy)GPG简介GPG背后的故事OpenPGPOpenPGP简介GPG(GNUPrivacyGuard)PGP算法PGPG算法介绍PGP工作流程PGP密钥交换PGP数字签名和验证数字签名过程数字签名算法数字签名编码格式验证过程GPG(PrettyGoodPrivacy)......
  • Golang 序列化与反序列化,包含字段首字母小写和字段时间格式化
     golang结构体json的时间 序列化与反序列化 格式化解决方案 //最近开发项目时候发现一个结构体的Json转换的时间格式问题。//即这种1993-01-01T20:08:23.000000028+08:00这种表示UTC方法。//从我们习惯来说,更喜欢希望的是1993-01-0120:08:23这种格式如......
  • 【启程Golang之旅】基本变量与类型讲解
    欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了解这门语言的基础知识和实用技巧。目录变量的概念数据类型的概念数据类型转换基本......
  • Golang:使用go-resty/resty发送http请求get和post
    Golang:使用go-resty/resty发送http请求get和post原创 吃个大西瓜 CodingBigTree 2024-05-2508:00 北京 听全文 go-resty/resty是一个简单的HTTP和REST客户端,受到Rubyrest-client的启发文档https://github.com/go-resty/resty/安装go get github......
  • Golang初学:项目目录结构,project-layout 项目
    goversiongo1.22.1windows/amd64Windows11+amd64x86_64x86_64GNU/Linux--- 序章golang项目的代码要怎么组织?怎么放比较简洁易读?看下面这个项目就晓得了。 project-layouthttps://github.com/golang-standards/project-layout注,有时访问失败。特写文记录。......
  • Golang 实现Java的AES ECB 加密
    JavapublicstaticStringencryptAesEcb(Stringtarget,StringsKey)throwsException{byte[]raw=sKey.getBytes("UTF-8");//"AES"就是用AES/ECB/PKCS5PaddingSecretKeySpecskeySpec=newSecretKeySpec(raw,......
  • Zabbix04-zabbix邮件报警配置
    zabbix通过mailx报警配置cat<<EOF>> ~/163_alert_conf.sh#!/bin/bashCERT_DIR=/home/zabbix/.certsmkdir-p/home/zabbix/.certschown-Rzabbix.zabbix/home/zabbix/echo-n|openssls_client-connectsmtp.163.com:465|sed-ne'/-BEGINCERTIFICA......
  • 【Golang】在Go语言中如何实现接口
    文章目录前言一、函数解释二、代码实现三、总结前言接口是Go语言中的一个核心概念,它为类型定义了行为。接口提供了一种方式,使得不同的类型可以被同样对待,只要它们实现了相同的接口。在这篇博客中,我们将讨论如何在Go语言中实现接口。一、函数解释在Go语言中,接口是......
  • 众测方案模版
    众测背景众测安排众测轮次:众测时间:集中1小时、日常使用众测人员:测试数据:任意正式账号众测范围:开展形式:开放式众测,众测人员进行自由探索   测试前准备相关资料:加入众测群方便沟通问题(群号):联系人:  众测激励&奖品问题评定参考条件:是否影响核心流程影......