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()
相关推荐
湫ccc1 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe2 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin2 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4082 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
湫ccc3 小时前
《Python基础》之基本数据类型
开发语言·python
drebander4 小时前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
威威猫的栗子4 小时前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
墨染风华不染尘4 小时前
python之开发笔记
开发语言·笔记·python
Dxy12393102165 小时前
python bmp图片转jpg
python
麦麦大数据5 小时前
Python棉花病虫害图谱系统CNN识别+AI问答知识neo4j vue+flask深度学习神经网络可视化
人工智能·python·深度学习