阿里云官方提供的 Python 语言 SDK,用于便捷、安全地调用阿里云短信发送、模板管理、签名管理等核心 API。该 SDK 基于阿里云 OpenAPI 规范构建,封装了认证、请求签名、HTTP 通信、错误处理等底层逻辑,使开发者能够专注于业务逻辑,快速集成短信能力。
安装
系统要求
Python 版本:3.7 及以上。
操作系统:Windows / macOS / Linux(无特殊限制)。
其他依赖:
alibabacloud_tea_openapi(核心运行时)、alibabacloud_tea_util(工具库)、urllib3(HTTP 客户端)。
使用 pip 安装
pip install alibabacloud_dysmsapi20170525验证安装
import alibabacloud_dysmsapi20170525
# 输出SDK具体版本号代表安装成功
print("SDK Version:", alibabacloud_dysmsapi20170525.__version__)
认证配置
步骤一:创建RAM用户并完成授权
阿里云主账号拥有较高权限,建议您通过RAM用户进行API调用和日常运维。有关RAM用户的更多信息,请参见RAM用户概览。
步骤二:获取访问凭证
请配置环境变量,通过环境变量读取访问密钥(AccessKey)。环境变量配置方法,请参见在Linux、macOS和Windows系统配置环境变量。
为避免在代码中硬编码AccessKey而造成泄露,请通过配置环境变量的方式,来获取AccessKey。
本文代码示例以环境变量名
ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET为例,进行后续操作。
步骤三:配置环境变量
环境变量方式最安全、最灵活,避免凭证硬编码,且易于在 CI/CD 流水线中注入。
设置环境变量:
export ALIBABA_CLOUD_ACCESS_KEY_ID='LTAI5tQZJYvKpXqF8yVzHmNfGxXxXx'
export ALIBABA_CLOUD_ACCESS_KEY_SECRET='ZxXxXxXxXxXxXxXxXxXxXxXxXxXxXx'在代码中使用:
import os
from alibabacloud_dysmsapi20170525.client import Client
from alibabacloud_tea_openapi import models as open_api_models
config = open_api_models.Config(
# 必填,您的 AccessKey ID,
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# 必填,您的 AccessKey Secret,
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# 凭证将自动从环境变量读取
client = Client(config)
安全最佳实践
使用环境变量或密钥管理服务存储凭证。
定期轮换访问密钥。
遵循最小权限原则,为RAM用户分配最小必要权限。
不要在日志中打印凭证信息。
在生产环境中使用RAM角色而非主账号凭证。
快速开始
代码示例
使用SDK调用发送短信API的代码示例如下,请根据注释完成参数填写。
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
from typing import List
from alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
def create_client(
access_key_id: str,
access_key_secret: str,
) -> Dysmsapi20170525Client:
"""
使用AK&SK初始化账号Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 必填,您的 AccessKey ID,
access_key_id=access_key_id,
# 必填,您的 AccessKey Secret,
access_key_secret=access_key_secret
)
# 访问的域名
config.endpoint = f'dysmsapi.aliyuncs.com'
return Dysmsapi20170525Client(config)
def main(
args: List[str],
) -> None:
# 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全。
# 以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式。
# 更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
client = create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
phone_numbers='1520000****',
sign_name='阿里云短信测试',
template_code='SMS_15495****',
template_param='{"code":"1234"}'
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
client.send_sms_with_options(send_sms_request, runtime)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
async def main_async(
args: List[str],
) -> None:
# 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
client = create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
phone_numbers='1520000****',
sign_name='阿里云短信测试',
template_code='SMS_15495****',
template_param='{"code":"1234"}'
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
await client.send_sms_with_options_async(send_sms_request, runtime)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
main(sys.argv[1:])
下载示例代码
也可以下载示例代码,直接运行。
访问SendSms。
在左侧的参数配置页签,填写需要的参数信息,填写示例如下:
PhoneNumbers 参数输入示例值: 139****0000。
SignName 参数输入示例值:阿里云短信测试。
TemplateCode 参数输入示例值:SMS_15495****。
TemplateParams 参数输入示例值:
{"code":"1234"}。
最佳实践总结
性能优化
启用连接池:SDK 默认使用
urllib3连接池,确保max_idle_conns配置合理(默认 50),避免频繁建立 TCP 连接。批量操作:对于大量用户,优先使用
phone_numbers字段进行批量发送(单次最多 100 个),而非循环调用。异步非阻塞:在高并发场景下,可结合
asyncio和aiohttp(需自行封装)实现真正的异步调用。
安全建议
HTTPS 强制:始终使用
https://开头的endpoint,禁止降级到 HTTP。输入验证:严格校验
phone_numbers(正则匹配)、template_param(JSON 解析)、sign_name(白名单)等所有用户输入。日志脱敏:在日志中打印
phone_numbers时,应进行掩码处理(如138****0000)。
资源管理
客户端复用:
Client实例是线程安全的,应在整个应用生命周期内全局复用,避免频繁创建销毁。及时关闭:虽然 SDK 未提供显式的
close()方法,但其底层 HTTP 客户端会在程序退出时自动清理资源。
常见问题
相关文档
GitHub 仓库:Alibaba Cloud Dysmsapi SDK for Python。
查看OpenAPI文档:
在调用OpenAPI前,建议您先阅读对应的接口文档SendSms,了解、学习调用该接口所需要的参数及权限等,更多信息请参见API概览。
调用OpenAPI:
SDK是最易于集成,且支持度最好的OpenAPI调用方式。本文以Java语言SDK调用OpenAPI,其他语言SDK的用法类似,更多信息请参见短信服务SDK。