能力加码!秒哒自定义插件「邮件推送」功能实践方案

秒哒支持接入邮件推送插件
融合邮件推送后的秒哒
将“生成结果”与“消息触达”无缝衔接
秒哒不再只停留在系统内部流转
而是把能力延伸到真实世界的收件箱中
👏下文将带大家走完
邮件推送插件接入的全部流程
👇
适用场景
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Part 1
发信域名配置
小哒这里用一个可以免费申请域名的网站:https://www.cloudns.net/main/
首先得创建一个ClouDNS账号,进入ClouDNS控制面板
点击创建域名、选择免费域名、输入域名
就可以得到免费域名了
注意⚠️
一个账号只能申请一个免费域名



Part2
邮件推送配置
这里以腾讯云邮件配置为例,腾讯云前1000封邮件免费,后面会按量计费,腾讯云邮件配置网址:https://console.cloud.tencent.com/ses
邮件推送配置需要进行「四个步骤」
发信域名配置,发信地址配置,发信模版配置和发送邮件。
接下来让我们一步一步去配置。

01
发信域名配置
选择发信域名模块,点击新建发信域名,填入刚才申请的域名点击创建就可以啦。


接下来进行发信域名验证,点击待验证域名后面的验证,可以看到发信域名的详细配置。
-
如果填入的域名是 test.com 形式,这属于主域名;
-
如果填入的域名是 test.abc.com 形式,这属于非主域名,是否使用主域名发信,在下面的配置中存在差异,详见对应的说明。
这里以已配置好的miaodayoujian.abrdns.com为例,想要通过验证需要在原来创建域名的网址进行配置。
点击域名进入配置页面,点击添加新纪录。




再添加新纪录页面中,需要我们把腾讯云发信域名配置的记录值作为新纪录一个一个填入。
添加完毕后返回腾讯云配置页面提交验证
-
如果状态全部显示已验证就说明验证成功~
-
如果未通过验证,可以在当前页面对比记录值和当前值,返回cloudns对记录进行修改。
全部模块显示已验证之后会显示验证通过。




02
发信地址配置
选择发信地址模块,点击新建。
填写邮箱前缀和发件人别名,点击提交,发信地址就创建好了。


03
发信模版配置
选择发信模版模块,点击新建。
填写模版名称,选择想要的模版类型并根据要求填入内容,点击提交即可。
创建好的模版需要进行审核,预计1个工作日内完成审核(周末、节假日顺延)。
为了保证模板通过率,模板内容必须体现实际业务且需要遵循邮件模板内容规范。
我们这里先创建两个纯文本模版作为例子。



Part3
发送邮件API配置
腾讯云API中心-发送邮件网址:https://cloud.tencent.com/document/api/1288/51034
跟前面几期教程一样,想要在秒哒配置自定义插件,需要三个比较重要的参数:
「请求参数」「请求示例」和「响应示例」
首先,请求参数可以在API文档中找到,请求示例和响应示例需要发起调试之后得到。
同时输入参数中也标明没有申请过特殊配置的话,需要在发起调试里配置模版相关参数。

发起调试后需要填入这个几个必填的参数和模版相关参数后,点击发送请求。


发送成功就可以得到请求示例和响应示例


目标邮箱中也会收到真实信件

同时,可以看到请求示例有腾讯云API签名,直接放在秒哒里可能无法解析出正确签名,需要把腾讯云API签名示例粘贴给秒哒。
选择代码示例中的HTTP Request和node.js(秒哒生成的应用大多数用的js代码),然后把代码复制下来一起粘贴给秒哒就可以啦。

最后记得要在腾讯云访问管理中的API密钥管理新建一个密钥。

Part4
秒哒自定义插件配置和测试验证
回到我们的秒哒官网的「自定义插件模块」,将以上参数粘贴给秒哒并解析:
可参考以下示例模板: 请帮我创建一个插件,插件内容如下:· 插件名称:邮件发送· 插件描述:调用腾讯云邮件发送的API服务· 请求参数: 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:SendEmail。 Version 是 String 公共参数,本接口取值:2020-10-02。 Region 是 String 公共参数,本接口仅支持其中的: ap-guangzhou, ap-hongkong 。 FromEmailAddress 是 String 发件人邮箱地址。不使用别名时请直接填写发件人邮箱地址,例如:noreply@mail.qcloud.com如需填写发件人别名时,请按照如下方式(注意别名与邮箱地址之间必须使用一个空格隔开):别名+一个空格+<邮箱地址>,别名中不能带有冒号(:)。 示例值:QCLOUDTEAM <noreply@mail.qcloud.com> Destination.N 是 Array of String 收信人邮箱地址,最多支持群发50人。注意:邮件内容会显示所有收件人地址,非群发邮件请多次调用API发送。 示例值:["destination@mail.qcloud.com"] Subject 是 String 邮件主题 示例值:YourTestSubject Template 否 Template 使用模板发送时,填写模板相关参数。· 请求示例: // 腾讯云API签名v3实现示例 // 本代码基于腾讯云API签名v3文档实现: https://cloud.tencent.com/document/product/213/30654 // 请严格按照文档说明使用,不建议随意修改签名相关代码 const https = require("https") const crypto = require("crypto") function sha256(message, secret = "", encoding) { const hmac = crypto.createHmac("sha256", secret) return hmac.update(message).digest(encoding) } function getHash(message, encoding = "hex") { const hash = crypto.createHash("sha256") return hash.update(message).digest(encoding) } function getDate(timestamp) { const date = new Date(timestamp * 1000) const year = date.getUTCFullYear() const month = ("0" + (date.getUTCMonth() + 1)).slice(-2) const day = ("0" + date.getUTCDate()).slice(-2) return `${year}-${month}-${day}` } // 密钥信息从环境变量读取,需要提前在环境变量中设置 TENCENTCLOUD_SECRET_ID 和 TENCENTCLOUD_SECRET_KEY // 使用环境变量方式可以避免密钥硬编码在代码中,提高安全性 // 生产环境建议使用更安全的密钥管理方案,如密钥管理系统(KMS)、容器密钥注入等 // 请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 const SECRET_ID = process.env.TENCENTCLOUD_SECRET_ID const SECRET_KEY = process.env.TENCENTCLOUD_SECRET_KEY const TOKEN = "" const host = "ses.tencentcloudapi.com" const service = "ses" const region = "ap-hongkong" const action = "SendEmail" const version = "2020-10-02" const timestamp = parseInt(String(new Date().getTime() / 1000)) const date = getDate(timestamp) const payload = "{\"FromEmailAddress\":\"test@miaodayoujian.abrdns.com\",\"Destination\":[\"2439307298@qq.com\"],\"Subject\":\"test\",\"Template\":{\"TemplateID\":162186,\"TemplateData\":\"{\\"user_name\\":\\"andy\\",\\"title\\":\\"1\\",\\"original_comment\\":\\"24\\",\\"reply_content\\":\\"24\\",\\"replier_name\\":\\"24\\"}\"}}" // ************* 步骤 1:拼接规范请求串 ************* const signedHeaders = "content-type;host" const hashedRequestPayload = getHash(payload) const httpRequestMethod = "POST" const canonicalUri = "/" const canonicalQueryString = "" const canonicalHeaders = "content-type:application/json; charset=utf-8\n" + "host:" + host + "\n" const canonicalRequest = httpRequestMethod + "\n" + canonicalUri + "\n" + canonicalQueryString + "\n" + canonicalHeaders + "\n" + signedHeaders + "\n" + hashedRequestPayload // ************* 步骤 2:拼接待签名字符串 ************* const algorithm = "TC3-HMAC-SHA256" const hashedCanonicalRequest = getHash(canonicalRequest) const credentialScope = date + "/" + service + "/" + "tc3_request" const stringToSign = algorithm + "\n" + timestamp + "\n" + credentialScope + "\n" + hashedCanonicalRequest // ************* 步骤 3:计算签名 ************* const kDate = sha256(date, "TC3" + SECRET_KEY) const kService = sha256(service, kDate) const kSigning = sha256("tc3_request", kService) const signature = sha256(stringToSign, kSigning, "hex") // ************* 步骤 4:拼接 Authorization ************* const authorization = algorithm + " " + "Credential=" + SECRET_ID + "/" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature // ************* 步骤 5:构造并发起请求 ************* const headers = { Authorization: authorization, "Content-Type": "application/json; charset=utf-8", Host: host, "X-TC-Action": action, "X-TC-Timestamp": timestamp, "X-TC-Version": version, } if (region) { headers["X-TC-Region"] = region } if (TOKEN) { headers["X-TC-Token"] = TOKEN } const options = { hostname: host, method: httpRequestMethod, headers, } const req = https.request(options, (res) => { let data = "" res.on("data", (chunk) => { data += chunk }) res.on("end", () => { console.log(data) }) }) req.on("error", (error) => { console.error(error) }) req.write(payload) req.end() curl -X POST https://ses.tencentcloudapi.com -H "Authorization: TC3-HMAC-SHA256 Credential=AKIDfBeFD37Mw5jnb2nJajunFMlbSB79ReLklcede_R2U66ejxCtvuTEqFGxsaZ_s3YJ/2026-01-16/ses/tc3_request, SignedHeaders=content-type;host, Signature=4d295ca7c52f6beec2746a0a17bfc67301dd3b09bedbd7faf492af6a338a99dd" -H "Content-Type: application/json" -H "Host: ses.tencentcloudapi.com" -H "X-TC-Action: SendEmail" -H "X-TC-Timestamp: 1768548980" -H "X-TC-Version: 2020-10-02" -H "X-TC-Region: ap-hongkong" -H "X-TC-Language: zh-CN" -H "X-TC-Token: 6jMbAoG3Etb0awctfiiKDje9LJq967Fa167f0bb6d1ddb141471c857f9ba9af62QsxGAXAVet3FFdiBJcZQpkUKnnp64Z8Zg05sjlcuAutFY5SIAp6ickAYaP0guBILzHFCdcUpDFdYJeQUwmKv0AexWly3vOUh7Lq8puZjw8Ls6_DTjISe8j2d_v4qxkqItcQfVFR20dqiQPi5_GQsxPPAw3NUhp9KyO2QqQmYmtE1xx4HdpEFuK57KFeSBHHcZ4DP4EpRRnZHEJUtc8-Pr9wKLvmBqCU94j8S6hKuCykaZ6_fZWU7utKDq7jqx7ZUxl6UY84ZwyzVLFc8hbVQLA" -d '{"FromEmailAddress":"test@miaodayoujian.abrdns.com","Destination":["2439307298@qq.com"],"Subject":"test","Template":{"TemplateID":162186,"TemplateData":"{\"user_name\":\"andy\",\"title\":\"1\",\"original_comment\":\"24\",\"reply_content\":\"24\",\"replier_name\":\"24\"}"}}'· 响应示例: { "Response": { "MessageId": "qcloudses-30-1391750054-date-20260116153620-LJoCOUegIXBN1", "RequestId": "18e86d8d-2c4d-433d-af7a-bc3197f4f159" } }
在填入刚刚申请的密钥点击创建,自定义插件就配置好了~

回到秒哒首页,创建应用验证邮件发送功能,可以看到插件被成功调用



可以成功发送邮件啦~🎉

小哒负责应用的外壳和逻辑中枢
而邮件推送插件
就是那套对外联络系统
只要应用按下“发送按钮”
信息自动送达收件箱

如果你看好“哒子”,不妨顺手给我们
点赞👍 / 转发📬 / 在看👀 / 评论📤
更多干货落地 🌟星标不迷路
夜雨聆风
