全部产品
Search
文档中心

短信服务:Python SDK调用示例

更新时间:Mar 04, 2026

阿里云官方提供的 Python 语言 SDK,用于便捷、安全地调用阿里云短信发送等核心 API。该 SDK 基于阿里云 OpenAPI 规范构建,封装了认证、请求签名、HTTP 通信、错误处理等底层逻辑,使开发者能够专注于业务逻辑,快速集成短信能力。

安装

系统要求

  • Python 版本:3.7 及以上。

  • 操作系统:Windows / macOS / Linux(无特殊限制)。

  • 其他依赖:alibabacloud_tea_openapi(核心运行时)、alibabacloud_tea_util(工具库)、urllib3(HTTP 客户端)。

使用 pip 安装

pip install alibabacloud_dysmsapi20180501

验证安装

import alibabacloud_dysmsapi20180501

# 输出SDK具体版本号代表安装成功
print("SDK Version:", alibabacloud_dysmsapi20180501.__version__)

认证配置

步骤一:创建RAM用户并完成授权

重要

阿里云主账号拥有较高权限,建议您通过RAM用户进行API调用和日常运维。有关RAM用户的更多信息,请参见RAM用户概览

  • 创建RAM用户:访问创建RAM用户,完成相关名称设置,并选择访问配置使用永久 AccessKey 访问,单击确定后即可完成RAM用户的创建。请及时保存AccessKey信息。

  • 为RAM用户授权:访问RAM用户列表,找到您所创建的RAM用户,单击操作列的新增授权。在权限策略文本搜索框中输入AliyunDysmsFullAccess后选中此策略,单击确认新增授权,即可完成授权操作。

说明
  • AliyunDysmsFullAccess管理短信服务的权限。

  • AliyunDysmsReadOnlyAccess:只读访问短信服务的权限。

  • 如果您需要新建自定义权限,请参见授权信息

步骤二:获取访问凭证

请配置环境变量,通过环境变量读取访问密钥(AccessKey)。环境变量配置方法,请参见在Linux、macOS和Windows系统配置环境变量

说明
  • 为避免在代码中硬编码AccessKey而造成泄露,请通过配置环境变量的方式,来获取AccessKey。

  • 本文代码示例以环境变量名ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET为例,进行后续操作。

安全最佳实践

  • 使用环境变量或密钥管理服务存储凭证。

  • 定期轮换访问密钥。

  • 遵循最小权限原则,为RAM用户分配最小必要权限。

  • 不要在日志中打印凭证信息。

  • 在生产环境中使用RAM角色而非主账号凭证。

快速开始

代码示例

使用SDK调用发送短信API的代码示例如下,请根据注释完成参数填写。

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
import json

from typing import List

from alibabacloud_dysmsapi20180501.client import Client as Dysmsapi20180501Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20180501 import models as dysmsapi_20180501_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


def create_client() -> Dysmsapi20180501Client:
    """
    使用凭据初始化账号 Client
    @return: Client
    @throws Exception
    """
    # 工程代码建议使用更安全的无 AK 方式,凭据配置方式请参见:https://www.alibabacloud.com/help/document_detail/378659.html。
    credential = CredentialClient()
    config = open_api_models.Config(
        credential=credential
    )
    # Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
    config.endpoint = f'dysmsapi.aliyuncs.com'
    return Dysmsapi20180501Client(config)


def main(
    args: List[str],
) -> None:
    client = create_client()
    batch_send_message_to_globe_request = dysmsapi_20180501_models.BatchSendMessageToGlobeRequest(
        to='your_value',
        from_='your_value',
        message='your_value'
    )
    try:
        resp = client.batch_send_message_to_globe_with_options(batch_send_message_to_globe_request, util_models.RuntimeOptions())
        print(json.dumps(resp, default=str, indent=2))
    except Exception as error:
        # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
        # 错误 message
        print(error.message)
        # 诊断地址
        print(error.data.get("Recommend"))


async def main_async(
    args: List[str],
) -> None:
    client = create_client()
    batch_send_message_to_globe_request = dysmsapi_20180501_models.BatchSendMessageToGlobeRequest(
        to='your_value',
        from_='your_value',
        message='your_value'
    )
    try:
        resp = await client.batch_send_message_to_globe_with_options_async(batch_send_message_to_globe_request, util_models.RuntimeOptions())
        print(json.dumps(resp, default=str, indent=2))
    except Exception as error:
        # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
        # 错误 message
        print(error.message)
        # 诊断地址
        print(error.data.get("Recommend"))


if __name__ == '__main__':
    main(sys.argv[1:])

下载示例代码

也可以下载示例代码,直接运行。

  1. 访问SendMessageToGlobe

  2. 在左侧的参数配置页签,填写需要的参数信息,填写示例如下:

  • To 参数输入示例值:88691567****

  • Message 参数输入示例值:这是一条测试短信

最佳实践总结

性能优化

  • 启用连接池:SDK 默认使用 urllib3 连接池,确保 max_idle_conns 配置合理(默认 50),避免频繁建立 TCP 连接。

  • 异步非阻塞:在高并发场景下,可结合 asyncioaiohttp(需自行封装)实现真正的异步调用。

安全建议

  • HTTPS 强制:始终使用 https:// 开头的 endpoint,禁止降级到 HTTP。

  • 输入验证:严格校验 phone_numbers(正则匹配)、template_param(JSON 解析)、sign_name(白名单)等所有用户输入。

  • 日志脱敏:在日志中打印 phone_numbers 时,应进行掩码处理(如 138****0000)。

资源管理

  • 客户端复用Client 实例是线程安全的,应在整个应用生命周期内全局复用,避免频繁创建销毁。

  • 及时关闭:虽然 SDK 未提供显式的 close() 方法,但其底层 HTTP 客户端会在程序退出时自动清理资源。

相关文档

  • 调用OpenAPI:

    SDK是最易于集成,且支持度最好的OpenAPI调用方式。本文以Python语言SDK调用OpenAPI,其他语言SDK的用法类似,更多信息请参见短信服务SDK