2026年阿里云短信服务全攻略:从入门到精通的实战指南

本文涉及的产品
短信服务,100条 3个月
短信服务,200条 3个月
简介: 阿里云短信服务是稳定可靠、高到达率的企业级通信平台,支持验证码、通知及营销短信发送。国内短信秒级触达,到达率高达99%;国际覆盖200+国家和地区。文档详述了从企业认证、资质备案、签名模板申请,到API接入(Java/PHP示例)、安全配置及常见问题的全流程,助力开发者高效集成。

一、阿里云短信服务核心概念:企业级通信能力

阿里云短信服务(Short Message Service)是阿里云提供的一种稳定可靠、高到达率的企业级通信服务。它支持调用API或使用群发助手发送验证码、通知类和营销类短信,国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。

阿里云短信服务历经双十一等极端场景考验,为全球数百万企业提供稳定可靠的通信服务,是国内短信服务领域的标杆产品。

二、阿里云短信服务接入流程:从准备工作到发送短信

2.1 准备工作

1. 注册阿里云账号:访问阿里云官网,https://www.aliyun.com  注册阿里云账号

2. 实名认证:必须完成企业认证(个体工商户通常也算企业认证)。个人认证账号功能受限,无法发送营销短信,且可能影响签名审核通过率

3. 开通服务:在阿里云短信板块:https://www.aliyun.com/product/sms 找到并开通“短信服务”(DYSMS)。

image.png

选择自己想要的资源包

image.png

付款即可。


4. 获取AccessKey:这是调用API的凭证。强烈建议使用RAM子用户的AccessKey,并授予其 <AliyunDysmsFullAccess> 权限策略。这比直接使用主账号的AK更安全。创建AccessKey后,务必妥善保管AccessKey ID和AccessKey Secret

4.1,流程如下:首先到用户管理板块创建子用户:https://ram.console.aliyun.com/users

image.png

4.2,然后为该子用户设置对应的权限,这里推荐给他设置<AliyunDysmsFullAccess> 短信管理权限

image.png

image.png

4.3,获取该子用户的AccessKey ID和AccessKey Secret

登录主账号,打开创建accesskey板块:https://ram.console.aliyun.com/overview?activeTab=workflow

输入你要设置的子账号,

image.png

点击执行配置,即可获取该子用户的AccessKey ID和AccessKey Secret

image.png

2.2 申请资质

根据工信部要求,发送国内短信需提供短信签名归属方的企业资质证件(如营业执照)进行备案。此资质审核是后续申请签名的基础,预计需2个工作日。

image.png

需要填写的信息是:单位名称,单位法人姓名,单位法人身份证号,有效期,单位管理人手机号

需要上传的信息是:单位营业执照,单位法人身份证正反面,单位管理人身份证正反面

image.png

image.png

image.png

2.3 申请短信签名

image.png

1. 签名定义:是出现在短信开头的标识,用于告知用户短信来源,例如【阿里云】。它必须能明确代表您的企业或品牌

2. 命名规范:需遵守平台规则,通常要求是已备案的企业名称、产品名、网站名等

3. 关键步骤 - 运营商报备:签名在阿里云审核通过后,还会自动或手动提交给运营商进行最终实名报备。这是最容易卡顿、最耗时的环节,通常需要7到10个工作日或更长时间。在报备成功前,使用此签名发送短信可能会失败,并返回错误码 <isv.PORT_NOT_REGISTERED> (端口未注册)

image.png

2.4 申请短信模板

image.png

1. 模板内容:即短信正文。若内容中有可变部分(如验证码、订单号),需使用变量,比如:您注册阿里云的的验证码为{code},5分钟内有效

2. 模板类型:分为验证码、通知短信和推广短信。类型不同,审核标准和资费可能不同。创建时需选择正确的类型并与已审核通过的签名关联

3. 审核流程:模板也需通过平台审核(约2小时)后才可使用

image.png

2.5 发送短信

1. 发送方式:可通过控制台的“群发助手”或调用 **<SendSms> ** API实现

2. API调用核心参数

<PhoneNumbers>: 接收手机号

<SignName>: 已审核通过并报备成功的签名名称

<TemplateCode>: 已审核通过的模板CODE

<TemplateParam>: 替换变量的JSON字符串,如 {"code":"123456"}

2.6 查询发送详情与回复

1. 查询发送状态:可通过API(如QuerySendDetails)或配置回执消息(SmsReport)来查询每条短信的发送状态(成功/失败)

2. 接收回复短信:若需接收用户的回复短信(上行短信),需配置SmsUp回执消息

2.7 设置预警

为避免盗刷或资金耗尽,建议在控制台设置预警,如:

套餐包余量预警

发送频率预警

验证码防盗刷预警

三、以Java为例阿里云短信服务代码实现:从依赖引入到发送短信

3.1 引入依赖

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>dysmsapi20170525</artifactId>
  <!-- 请将 'the-latest-version' 替换为最新版本号:https://mvnrepository.com/artifact/com.aliyun/dysmsapi20170525 -->
  <version>the-latest-version</version>
</dependency>


3.2 配置参数

在application.yml配置文件中引入阿里云短信服务的配置,相关内容需要在阿里云控制台按指引申请。

# 阿里云key
aliyun:
  sms:
    accessKeyId: xxxxxxxxxxxxxxx
    accessSecret: xxxxxxxxxxxxxxxxxxxx
    endpoint: dysmsapi.aliyuncs.com
    signName: 签名

3.3 编写公共发送工具类

 
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.b2bwings.nry.app.business.web.param.message.SmsSendParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
 
@Slf4j
@Component
@ConfigurationProperties(prefix = "aliyun.sms")
public class SmsUtil {
    // 访问密钥id
    @Value("${aliyun.sms.accessKeyId}")
    private String accessKeyId;
 
    // 访问密钥secret
    @Value("${aliyun.sms.accessSecret}")
    private String accessKeySecret;
 
    // 短信 API 的访问域名
    @Value("${aliyun.sms.endpoint}")
    private String endpoint;
 
    // 短信签名
    @Value("${aliyun.sms.signName}")
    private String signName;
 
    /**
     * 创建客户端
     */
    public Client createClient() {
        // 创建阿里云客户端:配置访问密钥 ID、 配置密钥、配置访问端点
        Config config = new Config()
                .setAccessKeyId(accessKeyId)
                .setAccessKeySecret(accessKeySecret);
        config.endpoint = endpoint;
        Client client = null;
        try {
            client = new Client(config);
        } catch (Exception e) {
            log.error("阿里云短信服务初始化失败:{}" ,e.getMessage());
        }
        return client;
    }
 
 
    // 发送短信
    public Boolean sendSms(SmsSendParam param) {
        // 阿里云客户端
        Client client = createClient();
        // 构建发送请求
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                // 设置签名
                .setSignName(signName)
                // 设置模板
                .setTemplateCode(param.getTemplateCode())
                // 设置手机号为参数传入的值
                .setPhoneNumbers(param.getPhone())
                // 设置模板为参数传入的值(map转json):{\"code\":\"" + code + "\"}
                .setTemplateParam(param.getTemplateParam());
 
        // 运行时选择,可以设置不同的属性来配置运行时环境的参数。
        RuntimeOptions runtime = new RuntimeOptions();
        try {
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            if (!"OK".equals(sendSmsResponse.getBody().getCode())) {
                log.info("短信发送失败:{}" ,sendSmsResponse.getBody().getMessage());
                return false;
            }
            log.info("短信发送成功");
            return true;
 
        } catch (Exception error) {
            log.info("短信发送异常:{}" , error.getMessage());
            return false;
        }
    }
}

3.4 模板参数需要自定义

这里根据不同的业务需求实现,我这里是根据我的需求写的,主要是针对短信发送情况存储验证码、存储发送日志,发送结果等。

其中模板参数内容需要根据你配置的短信内容模板决定,如举例:

短信内容模板:您的验证码${code},该验证码5分钟内有效,请勿泄露给他人!

模板参数内容:{"code":"446774"}

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
 
/**
 * 发送短信参数
 * @author 
 */
@Data
@AllArgsConstructor
public class SmsSendParam {
 
    @ApiModelProperty(value = "发送目标手机号")
    private String phone;
 
    @ApiModelProperty(value = "模板Code")
    private String templateCode;
 
    @ApiModelProperty(value = "模板参数")
    private String templateParam;
}

//构建发送短信参数
            SmsSendParam sendParam = new SmsSendParam(phone, templateCode, JsonUtil.getJsonString(map));
            Boolean verifyCode = smsUtil.sendSms(sendParam);
            //发送失败
            if (!verifyCode) {
                //存储验证码值redis,保存短信记录
                putRedisHandle(templateCode, phone, code, msgLog, now, time);
 
                msgLog.setRequestStatus(2);
                msgLog.setGmtModified(now);
                msgLogMapper.updateById(msgLog);
 
                return ApiResult.fail(ApiCode.LOGIN_SMS_ERR);
            }else{
                putRedisHandle(templateCode, phone, code, msgLog, now, time);
            }
            return ApiResult.ok();

四、以PHP为例阿里云短信服务代码实现:从依赖引入到发送短信

4.1,安装阿里云短信服务SDK

你可以使用Composer来安装阿里云短信服务的PHP SDK。在项目的composer.json文件中添加以下依赖

{
    "require": {
        "aliyun/dysmsapi-php-sdk": "^x.x.x" // 使用最新版本
    }
}

4.2,配置参数

<?php
 
namespace app\admin\controller;
 
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use think\facade\Config as tConfig;
 
class AliSms  {
 
    /**
     * 使用AK&SK初始化账号Client
     * @param string $accessKeyId
     * @param string $accessKeySecret
     * @return Dysmsapi Client
     */
    public static function createClient($accessKeyId, $accessKeySecret,$endpoint){
        $config = new Config([
            // 您的 AccessKey ID
            "accessKeyId" => $accessKeyId,
            // 您的 AccessKey Secret
            "accessKeySecret" => $accessKeySecret
        ]);
        // 访问的域名
        $config->endpoint = $endpoint;
        return new Dysmsapi($config);
    }
 
    /**
     * @param string[] $args
     * @return void
     */
    public static function main($args){
        $client = self::createClient($args['access_key_id'], $args['access_key_secret'],$args['endpoint']);
        $sendSmsRequest = new SendSmsRequest([
            "phoneNumbers" => $args['phone'],  //发送的手机号码
            "signName" => $args['sign_name'],  //签名
            "templateCode" => $args['template'],  //模板CODE
            "templateParam" => $args['code']  //这个根据你的模板信息来
        ]);
 
        $result = $client->sendSms($sendSmsRequest);
        // return $result;
        if ($result->body->message == 'OK' && $result->body->code == 'OK') {
            return ['code' => 200,'msg'=>'success'];
        }
        if ($result->body->code == 'isv.MOBILE_NUMBER_ILLEGAL') {
            return ['code' => 0, 'msg' => '手机号码格式不正确'];
        }
        return ['code' => 0, 'msg' => '短信发送失败,网络繁忙'];
    }
}

4.3,发送短信

<?php
namespace app\admin\controller;
 
use app\admin\controller\AliSms;
use think\Session;
use think\Request;
use think\Db;
class Send{
    
    public function send(){
        // $res = ROOT_PATH.'application/admin/controller/AliSms.php';
        $request = Request::instance();
        $phone = $request->param('phone');
        $code = rand(1000,9999);
        session("{$phone}",$code);
        $accessKeyId = '';//accesskeyid
        $accessKeySecret = '';//accessketsecret
        $endpoint = 'dysmsapi.aliyuncs.com';
        $param['access_key_id'] = $accessKeyId;
        $param['access_key_secret'] = $accessKeySecret;
        $param['endpoint'] = $endpoint;
        $param['phone'] = $phone;
        $param['sign_name'] = '模版名';
        $param['template'] = 'SMS_472685110';//模版id
        // $param['code'] = "{\"code\":\"1234\"}";
        $param['code'] = "{\"code\":\"{$code}\"}";
        $res = AliSms::main($param);
        // var_dump($res);
        return json_encode($res);
        
    }
?>


五、阿里云短信服务注意事项:避免常见问题

5.1 签名审核注意事项

签名必须能明确代表您的企业或品牌,命名规范需遵守平台规则

签名在阿里云审核通过后,还会提交给运营商进行最终实名报备,通常需要7到10个工作日或更长时间

在报备成功前,使用此签名发送短信可能会失败,并返回错误码 isv.PORT_NOT_REGISTERED (端口未注册)

5.2 模板审核注意事项

模板内容需符合平台规则,类型不同,审核标准和资费可能不同

模板需通过平台审核(约2小时)后才可使用

5.3 AccessKey安全注意事项

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

创建AccessKey后,务必妥善保管AccessKey ID和AccessKey Secret,避免泄露

若AccessKey泄露,需及时禁用或删除该AccessKey,并创建新的AccessKey

5.4 发送短信注意事项

发送短信时,需使用已审核通过并报备成功的签名和模板

若发送失败,需根据错误码排查问题,如 isv.PORT_NOT_REGISTERED表示端口未注册,需等待签名报备成功

六、阿里云短信服务常见问题FAQ:新手必看

6.1 个人认证账号能否发送营销短信?

个人认证账号功能受限,无法发送营销短信,且可能影响签名审核通过率,建议完成企业认证。

6.2 签名审核通过后,为什么发送短信仍然失败?

签名在阿里云审核通过后,还会提交给运营商进行最终实名报备,通常需要7到10个工作日或更长时间。在报备成功前,使用此签名发送短信可能会失败,并返回错误码 isv.PORT_NOT_REGISTERED (端口未注册)。

6.3 如何选择短信模板类型?

短信模板类型分为验证码、通知短信和推广短信。类型不同,审核标准和资费可能不同。创建时需选择正确的类型并与已审核通过的签名关联。

6.4 如何保障AccessKey的安全?

强烈建议使用RAM子用户的AccessKey,并授予其 AliyunDysmsFullAccess 权限策略,这比直接使用主账号的AK更安全。创建AccessKey后,务必妥善保管AccessKey ID和AccessKey Secret,避免泄露。若AccessKey泄露,需及时禁用或删除该AccessKey,并创建新的AccessKey。

6.5 如何查询短信发送状态?

可通过API(如QuerySendDetails)或配置回执消息(SmsReport)来查询每条短信的发送状态(成功/失败)。

相关文章
|
18天前
|
人工智能 JavaScript 机器人
OpenClaw 阿里云轻量服务器部署+QQ机器人搭建|零代码命令速通+常见问题解答
2026年,OpenClaw(原Clawdbot)凭借轻量化部署、多平台接入与灵活的Skill扩展能力,成为个人与团队搭建专属AI助手的首选工具。对于新手而言,阿里云轻量服务器是部署OpenClaw的最优选择——成本低、稳定性强、7×24小时在线,搭配QQ可快速搭建能聊天、执行指令、自动处理任务的AI机器人,满足日常沟通、信息查询、任务管理等需求。
269 8
|
JavaScript Java API
如何接入阿里云短信服务 (完整指南)
如何接入阿里云短信服务 (完整指南)
58567 1
|
1月前
|
存储 人工智能 关系型数据库
OpenClaw怎么可能没痛点?用RDS插件来释放OpenClaw全部潜力
OpenClaw插件是深度介入Agent生命周期的扩展机制,提供24个钩子,支持自动注入知识、持久化记忆等被动式干预。相比Skill/Tool,插件可主动在关键节点(如对话开始/结束)执行逻辑,适用于RAG增强、云化记忆等高级场景。
873 56
OpenClaw怎么可能没痛点?用RDS插件来释放OpenClaw全部潜力
|
1月前
|
人工智能 安全 前端开发
阿里开源 Team 版 OpenClaw,5分钟完成本地安装
HiClaw 是 OpenClaw 的升级版,通过引入 Manager Agent 架构和分布式设计,解决了 OpenClaw 在安全性、多任务协作、移动端体验、记忆管理等方面的核心痛点。
1861 60
阿里开源 Team 版 OpenClaw,5分钟完成本地安装
|
27天前
|
Java PHP 开发工具
2026 年阿里云对象存储OSS超详细教程:功能全解与一步一步上手流程(新手小白也能立刻上手)
阿里云OSS是安全、稳定、无限扩容的云端对象存储服务,适用于图片、视频等静态资源存储。支持高并发访问、全球加速、防盗链与加密。本文详述开通流程及Java/PHP/Python/C#多语言上传实践。
|
21天前
|
JSON 前端开发 数据可视化
让API开口说话,Swagger如何把枯燥代码变成“活文档”
好的API文档不是写出来的,是“生成”出来的。Swagger就是你的API的专属化妆师+摄影师+经纪人,让你的接口从“代码宅男”变身“流量明星”!
98 6
|
21天前
|
SQL 关系型数据库 MySQL
2026年阿里云RDS MySQL全攻略:从入门到精通的实战指南
阿里云RDS MySQL是稳定可靠、弹性伸缩的企业级托管数据库服务,基于MySQL深度优化AliSQL内核,提供三节点强一致、高可用及基础版架构选型;支持自动备份、读写分离、Serverless弹性扩缩容与全方位安全防护,助力高效运维与性能提升。(239字)
|
9天前
|
Linux API 数据安全/隐私保护
阿里云无影云电脑、本地部署OpenClaw图文攻略:WhatsApp集成+千问Qwen3.6-Plus配置与避坑指南
本文完整覆盖2026年**阿里云无影云电脑部署OpenClaw、本地MacOS/Linux/Windows11全平台搭建、千问Qwen3.6-Plus API高性能配置、WhatsApp全球IM集成**四大核心流程,搭配全场景高频问题排查方案,所有命令均为实测可直接复制,无需复杂操作即可完成部署。
178 14