mit einem Klick
tencent-ses-service
// 腾讯云官方的邮件推送 SES 服务使用 skill。 涵盖:SMTP 发送邮件所需的全部环境变量、API 接口设计规范、验证码邮件的完整发送流程(含人机验证、频率控制、Redis 存储)。 本 skill 以网络协议 / HTTP API 接口级别描述,不绑定具体编程语言。
// 腾讯云官方的邮件推送 SES 服务使用 skill。 涵盖:SMTP 发送邮件所需的全部环境变量、API 接口设计规范、验证码邮件的完整发送流程(含人机验证、频率控制、Redis 存储)。 本 skill 以网络协议 / HTTP API 接口级别描述,不绑定具体编程语言。
| name | tencent-ses-service |
| version | 1.1.0 |
| description | 腾讯云官方的邮件推送 SES 服务使用 skill。 涵盖:SMTP 发送邮件所需的全部环境变量、API 接口设计规范、验证码邮件的完整发送流程(含人机验证、频率控制、Redis 存储)。 本 skill 以网络协议 / HTTP API 接口级别描述,不绑定具体编程语言。 |
| model | deepseek-chat |
| tags | ["SES","SMTP","腾讯云","邮件推送","验证码","Redis"] |
| rootUrl | https://raw.githubusercontent.com/LSTM-Kirigaya/jinhui-skills/main/skills/tencent-ses-service/SKILL.md |
| allowed-tools | ["Read","Write","Edit","Bash","Grep","Glob"] |
本 skill 描述如何通过腾讯云 SES(Simple Email Service)的 SMTP 协议 发送邮件。腾讯云 SES 提供两种接入方式:API SDK 方式(SendEmail 接口)和 SMTP 方式。本文档基于 SMTP 方式,因为它不依赖腾讯云 SDK,通用性更强。
在腾讯云控制台开通 SES 服务,完成发件域名配置和 DKIM/SPF 验证。
https://console.cloud.tencentcloud.com/ses| 服务 | 用途 |
|---|---|
| Redis | 存储验证码(含过期时间)、滑块验证 token、频率控制标记 |
| 滑块验证服务 | 生成并校验人机验证 token(本项目使用腾讯云验证码服务) |
以下环境变量为必填项,缺一不可:
| 变量名 | 示例值 | 说明 |
|---|---|---|
TENCENTCLOUD_SMTP_HOST | smtp.qcloudmail.com | 腾讯云 SES SMTP 服务器地址 |
TENCENTCLOUD_SMTP_PORT | 465 | SMTP 端口。465 为 SSL 直连,587 为 STARTTLS |
TENCENTCLOUD_SMTP_USER | noreply@healthymax.cn | SMTP 认证用户名(即发件邮箱地址) |
TENCENTCLOUD_SMTP_PASSWORD | WDWOPKOPkop12312dko | SMTP 认证密码(在腾讯云 SES 控制台生成,非邮箱登录密码) |
端点: POST /api/ses/send-verification-code
认证要求: 无需登录态(公开接口),但需要滑块验证 token。
字段 类型 必填 说明
────────────────────────────────────────────────
email string 是 收件人邮箱地址
captchaToken string 是 滑块验证通过后获得的 token
请求示例(仅供参考,非特定语言):
{
"email": "user@example.com",
"captchaToken": "abc123def456..."
}
成功时 HTTP 200:
{
"success": true,
"message": "验证码发送成功",
"data": {
"requestId": "<messageId from SMTP server>"
}
}
失败时返回对应 HTTP 状态码(400/429/500):
{
"success": false,
"message": "错误描述",
"data": null
}
| HTTP 状态码 | message | 触发条件 |
|---|---|---|
| 400 | 邮箱地址不能为空 | email 字段缺失或为空 |
| 400 | 邮箱格式不正确 | email 不符合正则 ^[^\s@]+@[^\s@]+\.[^\s@]+$ |
| 400 | 请先完成滑块验证 | captchaToken 未传 |
| 400 | 验证已过期,请重新完成滑块验证 | captcha token 在 Redis 中不存在或已过期 |
| 429 | 发送验证码过于频繁,请稍后再试 | 同一邮箱或同一 IP 在 30 秒内重复请求 |
| 500 | 验证服务不可用 | Redis 连接不可用 |
| 500 | 发送邮箱验证码异常: ... | SMTP 发送失败(携带具体错误信息) |
客户端 服务端 Redis SMTP 服务器
│ │ │ │
│ POST /api/ses/send- │ │ │
│ verification-code │ │ │
│ {email, captchaToken} │ │ │
│ ────────────────────────────▶ │ │ │
│ │ GET captcha:token:{token} │ │
│ │ ──────────────────────────────▶ │ │
│ │ ◀────────────────────────────── │ │
│ │ DEL captcha:token:{token} │ │
│ │ ──────────────────────────────▶ │ │
│ │ │ │
│ │ GET throttle:email:{email} │ │
│ │ ──────────────────────────────▶ │ │
│ │ GET throttle:email:ip:{ip} │ │
│ │ ──────────────────────────────▶ │ │
│ │ │ │
│ │ SETEX email_verification_code: │ │
│ │ {email} 900 {code} │ │
│ │ ──────────────────────────────▶ │ │
│ │ SETEX throttle:email:{email} │ │
│ │ 30 {timestamp} │ │
│ │ ──────────────────────────────▶ │ │
│ │ SETEX throttle:email:ip:{ip} │ │
│ │ 30 {timestamp} │ │
│ │ ──────────────────────────────▶ │ │
│ │ │ │
│ │ EHLO / STARTTLS / AUTH LOGIN │ │
│ │ ─────────────────────────────────────────────────▶ │
│ │ MAIL FROM / RCPT TO / DATA │ │
│ │ ─────────────────────────────────────────────────▶ │
│ │ ◀───────────────────────────────────────────────── │
│ │ │ │
│ ◀────────────────────────────│ │ │
│ {success: true, │ │ │
│ data: {requestId: "..."}} │ │ │
email 非空email 匹配格式正则 ^[^\s@]+@[^\s@]+\.[^\s@]+$captchaToken 非空captcha:token:{captchaToken}检查两个 Redis key,任一存在即返回 429:
| Redis Key | TTL | 含义 |
|---|---|---|
throttle:email:{email} | 30s | 同一邮箱 30 秒内只能发送一次 |
throttle:email:ip:{clientIP} | 30s | 同一 IP 30 秒内只能发送一次 |
客户端 IP 从请求头
X-Forwarded-For的第一个值获取,无代理时回退为127.0.0.1。
SETEX email_verification_code:{email} 900 {code}
SETEX throttle:email:{email} 30 {timestamp}SETEX throttle:email:ip:{ip} 30 {timestamp}连接到腾讯云 SMTP 服务器并发送邮件。SMTP 会话参数:
| 参数 | 值 | 说明 |
|---|---|---|
| Host | {TENCENTCLOUD_SMTP_HOST} | 腾讯云 SMTP 服务器 |
| Port | {TENCENTCLOUD_SMTP_PORT} | 465(SSL)或 587(STARTTLS) |
| Secure | true(465 端口)/ false(587 端口) | 是否使用 SSL 直连 |
| Auth User | {TENCENTCLOUD_SMTP_USER} | SMTP 认证用户名 |
| Auth Pass | {TENCENTCLOUD_SMTP_PASSWORD} | SMTP 认证密码 |
邮件信封(SMTP MAIL FROM / RCPT TO):
| 字段 | 值 |
|---|---|
| MAIL FROM | noreply@{发件域名} 实际地址为 {TENCENTCLOUD_SMTP_USER} |
| RCPT TO | 请求参数中的 email |
| From (header) | "noreply@{域名}" <{TENCENTCLOUD_SMTP_USER}> |
| To (header) | 请求参数中的 email |
| Subject | 邮箱验证 - 智健启能 |
data.requestId 为 SMTP 服务器返回的 messageIdmessage 包含 SMTP 错误详情客户端后续可通过独立的验证接口校验验证码(读取 Redis key email_verification_code:{email} 并比对),验证通过后删除该 key。
邮件正文使用 HTML 格式,建议遵循以下规范:
结构层次:
├── 外层容器(最大宽度 600px,圆角 24px,白色背景)
│ ├── Header:Logo 图片 + 产品名称
│ ├── Divider:1px 分割线
│ ├── Body:
│ │ ├── 标题(如"安全验证")
│ │ ├── 说明文字
│ │ ├── 验证码展示区(灰底圆角卡片,等宽字体居中展示 6 位数字)
│ │ └── 过期提示
│ └── Footer:安全提示 + 版权信息
@media only screen and (max-width: 600px) 覆盖容器宽度和圆角-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serifMonaco, Consolas, monospace),字间距 0.2em#f6993b(橙),文字色 #1E293B / #64748B,背景 #F8FAFC⚠️ 以下为 HTML 结构说明,具体内容请根据项目品牌调整。代码仅为示意,不绑定任何编程语言。
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"></head>
<body style="margin:0;padding:0;background-color:#F8FAFC;font-family:-apple-system,...">
<table width="100%"><tr><td align="center" style="padding:40px 20px;">
<table width="600" style="background:#fff;border-radius:24px;...">
<!-- Header: Logo + 产品名 -->
<tr><td>...</td></tr>
<!-- Body: 标题 + 说明 + 验证码 + 过期时间 -->
<tr><td>...</td></tr>
<!-- Footer: 安全提示 + 版权 -->
<tr><td>...</td></tr>
</table>
</td></tr></table>
</body>
</html>
模板名称必须清晰表明邮件的具体用途,禁止使用模糊不清、无法判断用途的命名。
| 合法性 | 示例 | 说明 |
|---|---|---|
| ✅ 合法 | 注册验证码邮件 | 明确表明用途为「注册」场景的验证码邮件 |
| ✅ 合法 | 密码重置确认邮件 | 明确表明用途为「密码重置」场景 |
| ❌ 非法 | 邮件发送 | 过于笼统,无法判断具体用途 |
| ❌ 非法 | 通知邮件 | 未说明通知的具体类型和场景 |
平台审核时会检查模板名称的明确性,命名不清将直接导致审核驳回。
HTML 模板中的链接必须包含完整域名,仅允许对路径或参数部分使用模板变量。禁止出现将完整 URL(含协议和域名)整体替换为变量的情况。
| 合法性 | 示例 | 说明 |
|---|---|---|
| ✅ 合法 | https://kirigaya.cn/blog/article?seq={{id}} | 域名完整,仅参数部分为变量 |
| ✅ 合法 | https://healthymax.cn/verify?token={{token}} | 域名完整,仅查询参数为变量 |
| ❌ 非法 | {{url}} | 完整 URL 被变量替代,无法审核域名归属 |
| ❌ 非法 | {{baseUrl}}/path | 协议和域名部分被变量替代 |
此要求用于方便平台审核链接指向的域名归属及内容合规性。请在提交审核前完成自检。
| Key Pattern | 类型 | TTL | 用途 |
|---|---|---|---|
captcha:token:{token} | 任意 | 由滑块服务设定 | 人机验证 token(验证后删除) |
throttle:email:{email} | String (timestamp) | 30s | 邮箱维度的发送频率控制 |
throttle:email:ip:{ip} | String (timestamp) | 30s | IP 维度的发送频率控制 |
email_verification_code:{email} | String (6位数字) | 900s (15min) | 邮箱验证码存储 |
客户端在调用 POST /api/ses/send-verification-code 前,必须:
captchaToken前端组件 sesService API Route
│ │ │
│ sendVerificationCode() │ │
│ ─────────────────────────▶ │ │
│ │ POST /api/ses/ │
│ │ send-verification-code │
│ │ ───────────────────────────▶ │
│ │ ◀─────────────────────────── │
│ ◀───────────────────────── │ │
示例代码(仅为说明调用模式,不涉及具体语言):
service.sendVerificationCode({ email: "user@example.com", captchaToken: "xxx" })
验证码邮件在以下场景被触发:
| 场景 | 说明 |
|---|---|
| 用户注册 | 输入邮箱后发送验证码 |
| 邮箱登录 | 选择邮箱验证码登录模式 |
| 修改密码 | 向已绑定的邮箱发送验证码 |
| 绑定/更换邮箱 | 向新邮箱发送验证码以确认所有权 |
SMTP 方式不依赖 tencentcloud-sdk-nodejs,使用标准的 SMTP 协议(RFC 5321),可以对接任何支持 SMTP 的邮件库。腾讯云 SES API SDK(SendEmail 接口)需要 SecretId/SecretKey 签名认证,而 SMTP 方式只需用户名密码,部署更简单。
本 skill 使用 465 端口 + secure: true。
不是。 SMTP 密码是在 SES 控制台单独生成的,仅用于 SMTP 认证。API SecretKey 用于调用腾讯云其他 API(如 SMS 短信服务),两者独立。
在现有 SMTP 连接基础上,只需构造不同的 Subject 和 html 内容即可发送任意事务邮件。注意:
TENCENTCLOUD_SMTP_PASSWORD)仅存储在服务端环境变量,不暴露给前端{{url}} 非法,https://example.com/path?id={{id}} 合法)基于 Three.js 实时渲染的 3D 几何体验证码系统,支持软阴影和 Raycaster 点击交互。后端生成 6 个大小严格互不相同的 3D 几何体元数据(位置、旋转、缩放、颜色、类型),前端使用多光源布光和正交相机实现公平大小比较。适用于实现或修改基于点击的 3D 几何体验证码,或将图形验证码集成到邮件验证码发送等敏感操作中。
Build production-ready Go backend services following DDD-layered architecture. Covers project scaffolding, config (Viper), database (GORM + MySQL/PostgreSQL), object storage (S3/MinIO), OAuth2 + JWT auth, OpenTelemetry tracing + Jaeger visualization, Zap logging, middleware patterns, and API routing. Use when creating a new Go backend service or adding features to an existing one that follows this architecture.
Integrate DuckDuckGo web search into a Rust project by calling Bing and DuckDuckGo HTTP APIs directly with browser fingerprint simulation. Use when building search functionality that needs text, news, image, or video results without relying on third-party CLI wrappers. Covers the primp HTTP client, vqd token extraction, Bing HTML parsing, DuckDuckGo JSON APIs, and cross-language HTTP concepts.
Build and send Feishu (Lark) interactive rich-text cards using lark_md format. Use when the user needs to: (1) construct Feishu card messages with markdown support, (2) send interactive cards via the Feishu Bot API, (3) format text with bold, inline code, lists, tables, or code blocks inside Feishu cards, or (4) convert markdown content into Feishu card elements.
中文学术毕业论文(本科/硕士/博士)全流程写作指导与质量检查 Skill。 用于辅助毕业论文的撰写、修改、审查与定稿,覆盖写作风格、文献检索、 论文结构规范、排版语法、实验规范、盲审合规性、图表一致性等维度。 使用场景: (1) 撰写或修改论文章节内容时,确保符合学术写作规范 (2) 润色文本,去除 AI 写作痕迹,使行文自然如人类研究者亲笔 (3) 检索、筛选和管理学术参考文献 (4) 检查论文结构、逻辑一致性、盲审匿名性、图表风格一致性 (5) 定稿前的全面复盘检查
为本地开发服务器分配并注入唯一端口号,防止同一台电脑上多个项目的端口冲突。启动任何开发服务器前,务必先通过 portman 脚本从 ~/.port-man 获取端口,并以 PORT=<端口> 原命令 的方式注入启动(例如 PORT=3001 npm run dev)。适用于:(1) 启动 Vite、Webpack、Next.js、后端 API 等开发服务器,(2) 配置多服务项目,(3) 避免与已有项目占用 3000、8080 等常用端口冲突,(4) 查看或更新 ~/.port-man 全局端口注册表。