阿里云短信服务从入门到精通:完整对接使用指南

apphuang2026年06月17日 18:27:496

一、认识阿里云短信服务

阿里云短信服务是阿里云提供的一种稳定可靠、高到达率的企业级通信服务。它支持调用API或使用群发助手发送验证码、通知类和营销类短信,国内验证短信秒级触达,到达率最高可达99%;国际短信覆盖200多个国家和地区。短信服务历经双十一等极端场景考验,为全球数百万企业提供稳定可靠的通信服务。

短信服务主要应用于以下场景:用户注册与登录的验证码发送、订单状态变更通知、服务到期提醒、预约确认、会员活动营销等。无论是ToC还是ToB业务,短信都是连接企业与用户的重要桥梁。

需要注意的是,阿里云短信服务目前仅支持企业认证账号使用。个人认证用户功能受限,无法发送营销短信,且可能影响签名审核通过率。如果个人认证用户仅需发送验证码短信,也可以考虑申请开通阿里云号码认证服务的短信认证功能。

需要先登录阿里云控制台,点击:阿里云控制台

二、整体接入流程概览

通过阿里云发送短信,整体流程可以分为以下几个核心步骤:

  • 账号准备与开通服务:注册阿里云账号、完成企业实名认证、开通短信服务
  • 申请资质:提交企业营业执照等资质材料,审核通过后方可申请签名
  • 申请短信签名:创建签名并等待审核通过(最快24小时)
  • 申请短信模板:创建模板并等待审核通过(约2-4小时)
  • 购买资源包或充值:确保账户有足够余额
  • 发送短信:通过控制台群发助手或API/SDK程序化发送

从2025年起,中国大陆新增短信签名必须完成运营商实名报备(5-10个工作日),请提前规划。

三、准备工作

3.1 注册账号与企业实名认证

访问阿里云官网注册阿里云账号。完成注册后,需要进行企业实名认证。个体工商户通常也算企业认证。实名认证是开通短信服务的硬性门槛。

3.2 开通短信服务

在阿里云产品列表中找到短信服务并开通。登录短信服务控制台,根据提示完成服务开通。

3.3 购买资源包或确保余额充足

短信服务计费方式分为按量计费和套餐包两种。国际站默认采用短信资源包付费模式,需要先购买资源包。如果有短信套餐包则先扣除套餐包,超出套餐包额度后按量计费,扣除账户余额。建议根据业务需要选择最优的计费方案。

3.4 创建RAM用户并获取AccessKey

AccessKey是调用API的凭证。强烈建议使用RAM子用户的AccessKey,并授予其AliyunDysmsFullAccess权限策略。这比直接使用主账号的AK更安全。

创建RAM用户的步骤:

  • 访问RAM控制台创建子用户
  • 为该子用户设置对应的权限,推荐授予AliyunDysmsFullAccess短信管理权限
  • 获取该子用户的AccessKey ID和AccessKey Secret

安全最佳实践:使用环境变量存储AccessKey(禁止硬编码)、定期轮换密钥、遵循最小权限原则。

四、申请资质

短信资质是阿里云对发送方身份的基础审核,相当于确认\"你是谁\"。企业需要提交营业执照或相关证件,阿里云会审核企业信息的真实性。资质审核通过后,才能进入签名和模板的申请环节。

申请资质需要填写的信息:单位名称、单位法人姓名、单位法人身份证号、有效期、单位管理人手机号。需要上传的材料:单位营业执照、单位法人身份证正反面、单位管理人身份证正反面。

资质审核预计需2个工作日。当使用场景非该阿里云账户企业、属于第三方公司的业务时,需要先申请相关他用资质。

五、申请短信签名

短信签名就是用户收到短信时,最前面方括号里的那个名字,比如〖淘宝〗、〖菜鸟网络〗。它是短信发送方的身份标识,让用户知道这条短信是谁发的。签名必须与提交的资质相匹配。

签名申请需要注意的要点:

  • 签名必须体现业务属性:比如\"XX科技\"会被拒,而\"XX科技验证码\"就能通过
  • 不能包含联系方式:类似\"联系客服138xxxx\"通不过
  • 金融类业务需要特殊资质:涉及支付、理财等关键词需额外提交金融许可证

首次申请建议选择\"验证码\"类签名,通过率最高。签名审核通常需2小时。在\"国内消息\"或\"国际/港澳台消息\"菜单下申请。

从2025年起,短信签名审核通过后,阿里云会自动向运营商发起实名制报备。这个流程平均需要5-7个工作日,部分情况可能需要7-10个工作日或更长。报备期间,签名无法用于发送短信。

六、申请短信模板

如果说签名解决的是\"谁发的\"的问题,那模板解决的就是\"发什么\"。阿里云短信服务不允许自由填写短信内容,所有发送的短信都必须基于已审核通过的模板。

模板内容支持变量占位符,用${variable}的格式表示。比如验证码模板可以写成:\"您的验证码为:${code},5分钟内有效。\"其中${code}在实际发送时会被替换为真实的验证码数字。需要注意的是,变量名不能使用mobile、email等敏感词,否则审核可能不通过。

模板审核通常需2小时。国内短信模板与国际/港澳台短信模板不通用,不能混用。模板审核通过后不允许修改,只能删除。删除短信模板后不可恢复,请谨慎操作。

七、发送短信

7.1 控制台发送(群发助手)

控制台提供\"群发助手\"功能,适用于人工发送系统通知或营销短信。操作步骤:

  • 登录短信服务控制台,左侧导航栏选择群发助手
  • 点击创建发送任务,填写场景类型、任务名称、短信内容等参数
  • 短信内容可包含变量,格式${name},如:尊敬的${name},您的快递…
  • 接收号码支持文件导入或手动输入(最多100个号码)
  • 可预设定时发送时间

7.2 API/SDK程序化发送

对于开发者,推荐使用阿里云官方SDK集成短信发送能力。SDK封装了请求签名、异常重试等底层逻辑。阿里云短信服务支持Java、PHP、Python、Node.js、C#等多种语言。

下面以Java和Python两种语言为例,详细介绍SDK的集成方法。

7.2.1 Java SDK集成示例

环境要求:Java版本需高于Java 8。

第一步:在pom.xml中添加Maven依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
    <version>2.0.24</version>
</dependency>

第二步:在application.yml中配置参数:

aliyun:
  sms:
    access-key-id: your-access-key-id
    access-key-secret: your-access-key-secret
    endpoint: dysmsapi.aliyuncs.com
    sign-name: 你的签名
    template-code: SMS_123456789

第三步:创建配置类初始化SDK客户端:

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AliyunSmsConfig {
    
    @Value("${aliyun.sms.access-key-id}")
    private String accessKeyId;
    
    @Value("${aliyun.sms.access-key-secret}")
    private String accessKeySecret;
    
    @Value("${aliyun.sms.endpoint}")
    private String endpoint;
    
    @Bean
    public Client smsClient() throws Exception {
        Config config = new Config()
            .setAccessKeyId(accessKeyId)
            .setAccessKeySecret(accessKeySecret)
            .setEndpoint(endpoint);
        return new Client(config);
    }
}

第四步:编写发送短信的Service:

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class SmsService {
    
    @Autowired
    private Client smsClient;
    
    @Value("${aliyun.sms.sign-name}")
    private String signName;
    
    @Value("${aliyun.sms.template-code}")
    private String templateCode;
    
    public SendSmsResponse sendSms(String phoneNumber, String templateParam) {
        SendSmsRequest request = new SendSmsRequest()
            .setPhoneNumbers(phoneNumber)
            .setSignName(signName)
            .setTemplateCode(templateCode)
            .setTemplateParam(templateParam);
        
        try {
            return smsClient.sendSms(request);
        } catch (TeaException e) {
            System.err.println("发送短信失败:" + e.getMessage());
            throw new RuntimeException("短信发送异常", e);
        }
    }
}

第五步:在Controller中调用:

@RestController
@RequestMapping("/api/sms")
public class SmsController {
    
    @Autowired
    private SmsService smsService;
    
    @PostMapping("/send")
    public ResponseEntity<String> send(@RequestParam String phone, @RequestParam String code) {
        String templateParam = "{\"code\":\"" + code + "\"}";
        SendSmsResponse response = smsService.sendSms(phone, templateParam);
        return ResponseEntity.ok("发送成功,BizId:" + response.getBody().getBizId());
    }
}

7.2.2 Python SDK集成示例

环境要求:Python版本>=3.7。

第一步:安装SDK:

pip install aliyun-python-sdk-core-v3
pip install aliyun-python-sdk-dysmsapi

第二步:编写发送短信代码:

from aliyunsdkcore.client import AcsClient
from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
import json

# 配置AccessKey
access_key_id = 'your-access-key-id'
access_key_secret = 'your-access-key-secret'
region_id = 'cn-hangzhou'

# 创建客户端
client = AcsClient(access_key_id, access_key_secret, region_id)

# 构建请求
request = SendSmsRequest.SendSmsRequest()
request.set_AcceptFormat('json')
request.set_PhoneNumbers('13800138000')
request.set_SignName('你的签名')
request.set_TemplateCode('SMS_123456789')
request.set_TemplateParam(json.dumps({"code": "123456"}))

# 发送请求
try:
    response = client.do_action_with_exception(request)
    print("发送成功:" + response.decode('utf-8'))
except Exception as e:
    print("发送失败:" + str(e))

八、安全与限流配置

8.1 RAM权限管理

推荐的做法是使用RAM身份(即RAM用户和RAM角色)来访问短信服务,避免直接使用阿里云主账号。这种方法不仅提升了安全性,还便于进行更精细的权限管理。

短信服务相关的系统权限策略:

  • AliyunDysmsFullAccess:管理短信服务的权限
  • AliyunDysmsReadOnlyAccess:只读访问短信服务的权限

如果默认的系统策略不满足需求,可以创建自定义权限策略,实现更细粒度的权限控制。

8.2 QPS限流

短信服务API有QPS限制:

  • 套餐包模式:单用户QPS限制为30次/秒
  • 按量付费模式:单用户QPS限制为2000次/秒

同一主账号及其所有RAM用户共享上述QPS限额。如果业务需要更高的并发量,建议升级到按量付费模式或联系阿里云提升限额。

8.3 发送频率限制

短信服务对发送频率有严格限制:

  • 单号码限频:1天20条
  • 验证码同一号码最多1条/分钟

可以在控制台设置日发送量总量阈值和月发送量总量阈值。同时可开启验证码防盗刷监控,防止恶意攻击。

九、回执消息配置

回执消息是在使用API接口发送短信之后,通过配置轻量消息队列(原MNS)消费模式或HTTP批量推送模式,帮助您掌握短信的发送成功率。

回执消息的两种接收方式:

  • MNS消息队列消费模式:通过轻量消息队列的Queue模型来接收指定地域的短信回执消息
  • HTTP批量推送模式:阿里云将回执消息通过HTTP请求推送到您指定的URL地址

配置回执消息后,可以实时获取短信的发送状态(成功、失败、运营商返回码等),便于业务系统进行后续处理和数据统计分析。

十、常见错误码排查

调用短信服务API接口失败时会返回错误码,以下是一些常见的错误码及解决方案:

  • isv.SMS_SIGNATURE_SCENE_ILLEGAL:签名和模板类型不一致。模板和签名类型必须匹配
  • InvalidTemplateCode:模板ID无效或未通过审核。检查模板ID是否正确,确认模板已审核通过
  • 账号欠费:账户余额不足。检查账户余额,充入相应金额
  • 权限不足:AK/SK没有授权管理短信服务的权限。检查RAM用户是否已授予AliyunDysmsFullAccess权限
  • 签名未通过审核:签名状态不是\"审核通过\"。在控制台确认签名已通过审核

发送失败时,建议首先检查API错误码和错误信息进行定位。更详细的问题排查可以通过订阅回执消息,参考短信发送状态回执错误码查看问题原因和解决方案。

十一、成本优化建议

短信服务计费主要涉及发送条数。以下是一些成本优化的建议:

  • 选择合适的计费方式:高频发送场景建议购买套餐包,单价更低;低频场景可选择按量付费
  • 套餐包优先抵扣:系统会优先消耗套餐包额度,超出部分按量计费
  • 关注套餐包余量:在控制台套餐包统计界面查看余量,及时续购避免按量高价
  • 合理设置发送频率:避免不必要的重复发送,节省成本
  • 利用测试环境:控制台提供专用的测试签名和测试模板,支持发送测试短信,帮助您在测试阶段免去签名和模板的申请环节

十二、国际短信注意事项

国际短信流程相对简化,大部分国家和地区无需预先申请签名和模板。但仍需注意以下事项:

  • 印度:需要完成DLT注册
  • 沙特阿拉伯:需要预注册Sender ID
  • 美国/加拿大:推荐使用当地号码(长码/短码)以提高到达率
  • 其他国家或地区:具体的合规要求以控制台页面显示为准

十三、常见问题问答

问:个人认证用户可以开通短信服务吗?
答:阿里云短信服务目前仅支持企业认证账号使用。个人认证用户功能受限,无法发送营销短信。建议升级为企业认证,或申请他用资质。

问:签名和模板审核需要多长时间?
答:签名审核通常需2小时,模板审核通常需2小时。但运营商实名报备需5-10个工作日。建议提前规划时间。

问:如何获取AccessKey?
答:在RAM控制台创建RAM子用户,勾选\"编程访问\",系统会自动生成AccessKey ID和AccessKey Secret。创建后请妥善保管Secret,不支持二次查看。

问:发送短信失败如何排查?
答:首先查看API返回的错误码和错误信息。常见原因包括:签名或模板未审核通过、账户余额不足、AK/SK权限不足、QPS超限等。也可通过订阅回执消息获取详细状态。

问:短信服务如何计费?
答:计费方式分为按量计费和套餐包两种。先扣除套餐包额度,超出部分按量计费。国内验证码短信低至0.045元/条起。具体价格以官网为准。

问:如何防止短信被盗刷?
答:可在控制台设置日发送量总量阈值和月发送量总量阈值。开启验证码防盗刷监控。同时建议设置验证码短信发送频率限制。使用RAM子账号并遵循最小权限原则也能降低风险。

相关文章

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

作为深耕阿里云代理领域 10 年的 “老司机”,经常被问到:“买阿里云服务器能便宜吗?有没有优惠价格?” 今天就用实打实的行业经验告诉你:不仅能便宜,选对渠道还能省一大笔! 这篇文章带你解锁阿里云服务…

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

最近总有朋友问我:“腾讯云有返点吗?腾讯云服务器能拿佣金不?返佣比例到底有多少?” 作为一个在腾讯云代理行业摸爬滚打了 10 年的 “老人”,今天就来跟大家好好…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS、对象存…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…

阿里云代理商有哪些?阿里云代理返点是真的么?

阿里云代理商有哪些?阿里云代理返点是真的么?

一,阿里云代理商基本介绍阿里云代理商通俗一点,就是指从事阿里云云服务器,云数据库等阿里云公有云产品销售的代理商,每销售一件阿里云公有云产品出去,阿里云给予该代理商一定比例的提成。在阿里云官方定义中,这…

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

一、阿里云五级代理体系:权益阶梯与合作价值1. 五级代理的核心权益差异阿里云构建了多层次的代理生态体系,涵盖全国总代理、区域核心代理、行业ISV(独立软件开发商)、金牌/银牌认证代理及标准代理五大核心…