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)来查询每条短信的发送状态(成功/失败)。

相关文章
|
1月前
|
监控 安全 Java
三步搞定短信验证码!SpringBoot集成阿里云短信实战
在SpringBoot项目中集成阿里云短信服务,核心是完成一系列前置申请,并调用其官方SDK发送短信。整个流程从前置准备到代码集成,步骤清晰。
296 2
|
JavaScript Java API
如何接入阿里云短信服务 (完整指南)
如何接入阿里云短信服务 (完整指南)
58981 1
|
消息中间件 安全 API
记项目的一次发送短信及短信模板配置分享
我们日常使用的软件或者网站,大部分都在使用短信业务,比如 注册 、 验证码功能 。还有一些特定的业务需要发送短信通知国内外用户等。有了需求就会有平台提供服务,国内有很多互联网公司都提供短信业务,比如阿里云、腾讯云、七牛。本次我们主要讲解的是阿里云提供的短信服务。
记项目的一次发送短信及短信模板配置分享
|
2月前
|
SQL 关系型数据库 MySQL
2026年阿里云RDS MySQL全攻略:从入门到精通的实战指南
阿里云RDS MySQL是稳定可靠、弹性伸缩的企业级托管数据库服务,基于MySQL深度优化AliSQL内核,提供三节点强一致、高可用及基础版架构选型;支持自动备份、读写分离、Serverless弹性扩缩容与全方位安全防护,助力高效运维与性能提升。(239字)
|
5月前
|
移动开发 UED
阿里云号码认证服务介绍、融合认证收费价格及号码认证使用场景说明
阿里云号码认证服务支持一键登录、短信/图形/融合认证,直连运营商实现无感验证,优化注册登录流程。提供多种套餐:短信认证100次3.99元/年,1万次480元/年;号码认证100万次2.9万元/年;融合认证更享优惠。适用于APP、H5等场景,提升用户体验。
|
7月前
|
自然语言处理 安全 API
2025阿里云双11特惠:文本短信低至 0.02 元/条,短信认证套餐包3.99元/年
2025年阿里云双11金秋云创季开启!短信认证套餐包新人专享7折,免资质签名即用即发;短信服务新客低至0.02元/条,老客最高减5850元,验证短信秒级触达率99%。
734 1
|
5月前
|
人工智能 自然语言处理 语音技术
使用阿里云轻量应用服务器部署MaxKB教程,大语言模型和RAG的开源知识库问答系统
MaxKB是基于大语言模型与RAG的开源知识库问答系统,支持阿里云轻量应用服务器一键部署。本文详解从创建实例、登录配置到添加模型、构建知识库、创建应用及集成嵌入的全流程,助力快速搭建企业专属AI问答助手,实现智能服务零代码接入。
1089 8
|
6月前
|
消息中间件 移动开发 安全
阿里云号码认证服务怎么使用?新手入门短信认证指南教程
阿里云短信认证服务提供一键登录与验证码认证,免资质、签名和模板申请,通过API快速集成。支持多认证方式,自动优选方案,短信兜底,适用于各类应用登录注册场景,助力开发者高效验证用户身份。
|
3月前
|
监控 应用服务中间件 nginx
别再手写 Nginx 配置了!用 Nginx UI 图形化管理你的 Web 服务!
Nginx UI 是一款轻量级图形化管理工具,让 Nginx 配置告别手写与 reload 煎熬。支持站点管理、反向代理、HTTPS 一键申请/续期、日志查看、配置版本回滚与语法校验,Docker 一键部署,适配单机及集群,真正将 Nginx 变成“可视化管家”。
955 3
|
5月前
|
网络协议 应用服务中间件 网络安全
阿里云SSL证书阿里云HTTPS证书全流程实战指南:购买、创建、申请与部署深度解析
本文详细介绍阿里云SSL证书的选型、购买、申请、部署及运维全流程,涵盖DV/OV/EV证书区别、DNS/文件/邮件验证方式、Nginx/Apache/CDN部署实操,并提供续费、吊销、托管等管理策略,助力网站快速实现HTTPS安全加密。
阿里云SSL证书阿里云HTTPS证书全流程实战指南:购买、创建、申请与部署深度解析