一般用于发送验证码,本代码实现功能如下:
1、联接MsSqlServer获取短信任务清单,这个可以业务系统往该表插数据
2、根据阿里云短信息的相关信息(appid,secret,消息模板),发送手机消息
3、创建定时任务,监听消息任务
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 pymssqlclass 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 | httprequest.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'))passdef 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()