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()
相关推荐
一一Null2 分钟前
Access Token 和 Refresh Token 的双令牌机制,维持登陆状态
android·python·安全·flask
钢铁男儿18 分钟前
Python 文本和字节序列(处理文本文件)
开发语言·python
三劫散仙24 分钟前
pycharm无法识别到本地python的conda环境解决方法
python·pycharm·conda
EvanSun__1 小时前
python学习 -- 综合案例1:设计一款基于python的飞机大战小游戏
python·学习·pygame
站大爷IP1 小时前
Webview+Python:用HTML打造跨平台桌面应用的创新方案
python
三道杠卷胡1 小时前
【AI News | 20250417】每日AI进展
人工智能·pytorch·python·语言模型·github
Tanecious.2 小时前
机器视觉--Python补充知识
android·开发语言·python
大模型真好玩3 小时前
一文带你了解RAG核心原理!不再只是文档的搬运工
人工智能·python·ai编程
da-peng-song4 小时前
python学习—详解word邮件合并
python·学习·word
明明跟你说过4 小时前
深入浅出 NVIDIA CUDA 架构与并行计算技术
人工智能·pytorch·python·chatgpt·架构·tensorflow