阿里云官方提供的 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_ID和ALIBABA_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:])
下载示例代码
也可以下载示例代码,直接运行。
在左侧的参数配置页签,填写需要的参数信息,填写示例如下:
To 参数输入示例值:88691567****
Message 参数输入示例值:这是一条测试短信
最佳实践总结
性能优化
启用连接池:SDK 默认使用
urllib3连接池,确保max_idle_conns配置合理(默认 50),避免频繁建立 TCP 连接。异步非阻塞:在高并发场景下,可结合
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前,建议您先阅读对应的接口文档SendMessageToGlobe,了解、学习调用该接口所需要的参数及权限等,更多信息请参见API概览。
调用OpenAPI:
SDK是最易于集成,且支持度最好的OpenAPI调用方式。本文以Python语言SDK调用OpenAPI,其他语言SDK的用法类似,更多信息请参见短信服务SDK。