Python 发送阿里云手机短信消息

一般用于发送验证码,本代码实现功能如下:

1、联接MsSqlServer获取短信任务清单,这个可以业务系统往该表插数据

2、根据阿里云短信息的相关信息(appid,secret,消息模板),发送手机消息

3、创建定时任务,监听消息任务

python 复制代码
from datetime import datetime
import time
import threading
from queue import Queue
from queue import Empty
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
import pymssql


class SmsServer(object):
    

    def init(self):
        #self.connect = pymssql.connect('xx.xx.x.xx:6229', 'xx', 'xx', 'HD_Common')  #建立连接
        self.connect = pymssql.connect('xx:6229', 'xx', 'xx', 'HD_Common')  #建立连接
        if self.connect:
            print("连接成功!")

    def send(self,mobile, code):

        client = AcsClient('LTAI4G1JqvT6xp8vE***', 'y5L5cm1FJEKhvG6N932IwSYP***', 'cn-hangzhou')

        request = CommonRequest()
        request.set_accept_format('json')
        request.set_domain('dysmsapi.aliyuncs.com')
        request.set_method('POST')
        request.set_protocol_type('https') # https | http
        request.set_version('2017-05-25')
        request.set_action_name('SendSms')

        request.add_query_param('RegionId', "cn-hangzhou")
        request.add_query_param('PhoneNumbers', mobile)
        request.add_query_param('SignName', "**汽车")
        request.add_query_param('TemplateCode', "SMS_211*****")
        request.add_query_param('TemplateParam', '{\"code\":\"'+ code +'\"}')

        response = client.do_action(request)
        # python2:  print(response)
        print(str(response, encoding = 'utf-8'))
        pass

    def sendSms(self):
        cursor = self.connect.cursor()   #创建一个游标对象,python里的sql语句都要通过cursor来执行
        sql = "select id,phone,code from s_sms where status = 0"
        cursor.execute(sql)   #执行sql语句
        row = cursor.fetchone()  #读取查询结果,
        while row:              #循环读取所有结果

            id = row[0]
            mobile = row[1]
            code = row[2]
            print("发送短信给"+ mobile +",code=" + code)
            self.send(mobile,code)
            self.updateSms(id)
            row = cursor.fetchone()
        
    def updateSms(self,id):
        cursor = self.connect.cursor()   
        cursor.execute(f"update s_sms set status=1,sendtime=getdate() where id={id}")  
        self.connect.commit()  #提交
        

    # 每n秒执行一次
    def job(self):
        while True:
            print(datetime.now().strftime("%Y-%m-%d  %H:%M:%S"))
            try:
                self.sendSms()
                time.sleep(3)      
            except Exception as reason:
                print(reason)
                
        
smsServer = SmsServer()
smsServer.init()
smsServer.job()
相关推荐
aqi001 小时前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
Csvn2 小时前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
金銀銅鐵19 小时前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup111 天前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill
aqi001 天前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵1 天前
用 Python 实现 Take-Away 游戏
python·游戏
copyer_xyf1 天前
Agent 流程编排
后端·python·agent
copyer_xyf1 天前
Agent RAG
后端·python·agent