← 返回教程
教程

阿里云短信验证码和邮件推送cloudflare dns 配置总结

阿里云短信验证码 + 邮件推送 + Cloudflare DNS 配置总结

TL;DR

服务阿里云产品核心操作
短信验证码短信服务 SMS → SendSmsVerifyCode申请签名 + 模板 → 调 API
邮件发送邮件推送 DirectMail创建发信域名 → 配 DNS → 创建发信地址
DNS 托管Cloudflare添加 SPF / DKIM / MX 记录(灰云)

一、阿里云短信验证码

1. 开通短信服务

路径:阿里云控制台 → 短信服务 SMS → 开通服务

开通后进入:短信服务控制台

2. 申请签名

路径:国内消息 → 签名管理 → 添加签名

字段说明
签名名称显示在短信开头的 【xxx】,如 【VideoSnap】
签名来源选与业务匹配的类型(企业选”企业”,个人选”APP”)
用途验证码 / 通知 / 推广(选验证码)
证明材料上传对应截图或证件

个人开发者选「APP」来源,上传应用截图即可,审核通常 1 个工作日。

3. 申请模板

路径:国内消息 → 模板管理 → 添加模板

字段示例
模板类型验证码
模板名称登录验证码
模板内容您的验证码为:${code},5分钟内有效,请勿泄露。

模板变量用 ${变量名} 格式,审核通过后才能使用。

模板内容不能包含推广性文字,否则会被拒审。

4. 获取 AccessKey

路径:右上角头像 → AccessKey 管理

强烈建议创建 RAM 子账号,只授权短信权限,不要用主账号 AK。

RAM 子账号授权策略:AliyunDysmsFullAccess

5. SendSmsVerifyCode vs SendSms

接口说明适用场景
SendSms发送任意模板短信,需自己生成验证码并存储通用短信发送
SendSmsVerifyCode阿里云帮你生成验证码并管理有效期,用 CheckSmsVerifyCode 验证推荐用于验证码场景

SendSmsVerifyCode 的优势:不需要自己维护 Redis/数据库存验证码,阿里云托管验证码状态。

6. API 调用示例(Node.js)

安装 SDK:

npm install @alicloud/dysmsapi20170525

发送验证码:

import Dysmsapi from '@alicloud/dysmsapi20170525';
import * as $OpenApi from '@alicloud/openapi-client';

const client = new Dysmsapi.default(new $OpenApi.Config({
  accessKeyId: process.env.ALIYUN_ACCESS_KEY_ID,
  accessKeySecret: process.env.ALIYUN_ACCESS_KEY_SECRET,
  endpoint: 'dysmsapi.aliyuncs.com',
}));

// 发送验证码(阿里云自动生成 code)
const sendReq = new Dysmsapi.SendSmsVerifyCodeRequest({
  phoneNumbers: '138xxxxxxxx',
  signName: '你的签名名称',
  templateCode: 'SMS_xxxxxxxxx',  // 模板 ID
});
await client.sendSmsVerifyCode(sendReq);

// 验证用户输入的验证码
const checkReq = new Dysmsapi.CheckSmsVerifyCodeRequest({
  phoneNumbers: '138xxxxxxxx',
  verifyCode: '用户输入的6位code',
});
const result = await client.checkSmsVerifyCode(checkReq);
// result.body.verifyResult === true 表示验证通过

模板里不需要 ${code} 变量,阿里云会自动替换。

验证通过后验证码立即失效,无需手动删除。

7. 常见问题

问题原因解决
isv.BUSINESS_LIMIT_CONTROL同号码发送频率超限同号每分钟 1 条,每天 10 条
isv.SMS_TEMPLATE_ILLEGAL模板未审核通过等待审核或修改内容重新提交
isv.SMS_SIGNATURE_ILLEGAL签名未审核通过同上
验证码验证失败超过 5 分钟 / 已使用让用户重新获取

二、阿里云邮件推送(DirectMail)

1. 开通邮件推送

路径:阿里云控制台 → 邮件推送 DirectMail → 开通服务

邮件推送按量计费,冷启动期间发送量少费用极低。

2. 创建发信域名

路径:邮件推送控制台 → 发信域名 → 新建域名

填入你要用于发信的域名,例如:

mail.your-domain.com

或者直接用根域名:

your-domain.com

提交后,阿里云会给出需要配置的 DNS 记录列表。

3. 阿里云要求的 DNS 记录

阿里云会在「发信域名详情」页显示以下记录,需要逐条添加到 DNS:

类型主机记录记录值说明
TXT@mailv=spf1 include:spf.mxhichina.com -allSPF,防伪造发件人
CNAMEdmxxx.dkim.mxhichina.comDKIM 签名验证
MX@mxw.mxhichina.com邮件接收(如需)
TXT_dmarcv=DMARC1; p=none; rua=mailto:xxxDMARC(可选)

实际记录值以阿里云控制台显示的为准,每个账号不同。

4. 创建发信地址

路径:邮件推送控制台 → 发信地址 → 新建发信地址

字段示例
发信地址no-reply@mail.your-domain.com
回信地址support@your-domain.com(可选)
发信类型触发邮件(验证码、通知)

触发邮件:实时发送,适合验证码和通知。

批量邮件:适合营销推广,需额外申请资质。

5. API 调用示例(Node.js)

安装 SDK:

npm install @alicloud/dm20151123

发送邮件:

import DmClient from '@alicloud/dm20151123';
import * as $OpenApi from '@alicloud/openapi-client';

const client = new DmClient.default(new $OpenApi.Config({
  accessKeyId: process.env.ALIYUN_ACCESS_KEY_ID,
  accessKeySecret: process.env.ALIYUN_ACCESS_KEY_SECRET,
  endpoint: 'dm.aliyuncs.com',
}));

const req = new DmClient.SingleSendMailRequest({
  accountName: 'no-reply@mail.your-domain.com',  // 发信地址
  fromAlias: 'xxx',                        // 发件人昵称
  addressType: 1,                                 // 1=随机账号,0=发信地址
  toAddress: 'user@example.com',
  subject: '你的验证码',
  htmlBody: '<p>你的验证码是:<strong>123456</strong></p>',
  // textBody: '纯文本备用',
});

await client.singleSendMail(req);

三、Cloudflare DNS 配置邮件记录

关键原则:邮件相关 DNS 记录必须用灰云(仅 DNS)

邮件的 SPF / DKIM / MX 记录不能走 Cloudflare 代理(橙云),否则:

在 Cloudflare DNS 控制台添加记录时,Proxy status 选 DNS only(灰色云朵)。

添加 SPF 记录

类型名称内容TTL代理
TXT@(根域名)或 mailv=spf1 include:spf.mxhichina.com -allAutoDNS only

如果根域名已有 SPF 记录,不能新建,需要把 include:spf.mxhichina.com 合并进去:

v=spf1 include:spf.mxhichina.com include:其他服务 -all

添加 DKIM 记录

类型名称内容TTL代理
CNAMEdm._domainkey(或阿里云指定前缀)阿里云控制台显示的 CNAME 目标AutoDNS only

添加 MX 记录(如需接收邮件)

类型名称邮件服务器优先级代理
MX@mxw.mxhichina.com10DNS only

验证 DNS 生效

# 验证 SPF
dig TXT your-domain.com

# 验证 DKIM
dig CNAME dm._domainkey.your-domain.com

# 验证 MX
dig MX your-domain.com

DNS 生效后,回到阿里云「发信域名」页面点击「验证」,状态变为绿色即配置成功。


四、环境变量配置

ALIYUN_ACCESS_KEY_ID=your_access_key_id
ALIYUN_ACCESS_KEY_SECRET=your_access_key_secret

# 短信
SMS_SIGN_NAME=你的签名名称
SMS_VERIFY_TEMPLATE_CODE=SMS_xxxxxxxxx

# 邮件
MAIL_FROM=no-reply@mail.your-domain.com
MAIL_FROM_ALIAS=xxx

注意事项速查

#规则
1短信/邮件 AK 用 RAM 子账号,不要用主账号
2签名和模板必须审核通过才能使用
3SendSmsVerifyCodeSendSms 更适合验证码,阿里云托管状态
4邮件 DNS 记录在 Cloudflare 必须设为灰云(DNS only)
5根域名已有 SPF 时,追加 include,不能新建第二条 TXT
6DKIM CNAME 记录不能开橙云代理
7发信域名 DNS 验证通过后才能正常发信
8触发邮件(验证码/通知)和批量邮件是两种不同配额