Python调用阿里云短信服务发送短信/验证码
·
配置权限
短信服务需要当前阿里云账号为企业认证
1. 创建RAM用户
- 使用阿里云的主账号,进入https://ram.console.aliyun.com/users/create创建RAM用户
- 然后登录这个RAM用户,进入https://ram.console.aliyun.com/profile/access-keys网址,创建AccessKey
- 进入短信服务的控制台:https://dysms.console.aliyun.com/domestic/text/qualification,以此完成:
- 资质管理(验证)
- 签名管理
- 模板管理
2. 配置测试用户
在没有审核通过前,只能够给测试用户发送短信,进入网页https://dysms.console.aliyun.com/quickstart,即可配置测试用户

示例代码
首先安装依赖:
pip install alibabacloud_dysmsapi20170525
import os
import random
import json
from alibabacloud_dysmsapi20170525.client import Client as DysmsapiClient
from alibabacloud_dysmsapi20170525 import models as dysmsapi_models
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
from dotenv import load_dotenv
load_dotenv() # 本地新建一个.env的文件,把下面的配置写进去
class SmsService:
"""阿里云短信服务类"""
def __init__(self):
self.access_key_id = os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID')
self.access_key_secret = os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
self.sign_name = "我的签名" # 控制台审核通过的签名
self.template_code = "SMS_xxxx" # 控制台审核通过的模板CODE
self.endpoint = "dysmsapi.aliyuncs.com"
# 初始化客户端
self._client = self._create_client()
def _create_client(self):
"""创建短信客户端"""
config = open_api_models.Config(
access_key_id=self.access_key_id,
access_key_secret=self.access_key_secret
)
config.endpoint = self.endpoint
return DysmsapiClient(config)
def send_verify_code(self, phone_number: str, code: str = None) -> dict:
"""
发送验证码短信
Args:
phone_number: 接收手机号
code: 验证码,如果不传则自动生成
Returns:
发送结果字典
"""
# 如果没有传入验证码,自动生成
if code is None:
code = ''.join([str(random.randint(0, 9)) for _ in range(6)]) # 生成随机验证码
# 构建模板参数
template_param = json.dumps({"code": code})
# 构建请求
request = dysmsapi_models.SendSmsRequest(
phone_numbers=phone_number,
sign_name=self.sign_name,
template_code=self.template_code,
template_param=template_param
)
try:
# 发送短信
response = self._client.send_sms_with_options(request, util_models.RuntimeOptions())
body = response.body
# 解析响应
result = {
"success": body.code == "OK",
"code": body.code,
"message": body.message,
"request_id": body.request_id,
"biz_id": body.biz_id,
"verify_code": code if body.code == "OK" else None
}
return result
except Exception as e:
return {
"success": False,
"code": "Error",
"message": str(e),
"verify_code": None
}
# ========== 使用示例 ==========
if __name__ == "__main__":
# 创建服务实例
sms = SmsService()
result = sms.send_verify_code("xxxxxx")
直接运行即可发送短信
更多推荐



所有评论(0)