基于Python制作短信发送程序

作者:虚坏叔叔 时间:2022-06-19 16:47:25 

一、Python短信发送界面最后的效果

基于Python制作短信发送程序

二、准备:注册腾讯云账号并配置短信功能

(1)注册腾讯云账号

登录腾讯云网址

(2)获取AppID、AppKey

在短信功能页面下,从应用管理>应用列表,获取ID、Key。

(3)创建签名

在短信功能页面下,进入国内短信>签名管理,创建签名。

(4)创建正文模板

在短信功能页面下,进入国内短信>正文模板管理,创建模版。并获取模板ID备用。

三.初始化短信发送程序窗口

3.1初始化窗口菜单

菜单具备打开手机号码文件、保存记录、查看版本等功能。

menu=tkinter.Menu(root)
   submenu1 = tkinter.Menu(menu, tearoff=0)
   submenu1.add_command(label='打开', command=open_file)
   submenu1.add_command(label='保存', command=save_file)
   menu.add_cascade(label='文件',menu=submenu1)
   submenu3 = tkinter.Menu(menu, tearoff=0)    
   submenu3.add_command(label='版本信息', command=Introduction)
   menu.add_cascade(label='帮助',menu=submenu3)
   root.config(menu=menu)

3.2初始化窗口控件

控件包括号码输入框、发送信息按钮,记录显示框。

global text1,text2
   label1 = tkinter.Label(root, text="手机号码:", font=("微软雅黑", 18))
   label1.place(x=30,y=32)
   text1 = tkinter.Text(root, wrap = 'none', font=("微软雅黑", 18))
   text1.place(x=30+120,y=30, width=520-120-100, height=40)
   button=tkinter.Button(root, text='发送信息',width=10, height=20, bg='gray', fg='white', font=("微软雅黑", 12),command=send_Button)
   button.place(x=480,y=30,width=70, height=40)
   sx = tkinter.Scrollbar(root,orient = tkinter.HORIZONTAL)
   sx.pack(side = tkinter.BOTTOM,fill = tkinter.X)
   sy = tkinter.Scrollbar(root)
   sy.pack(side = tkinter.RIGHT,fill = tkinter.Y)    
   text2 = tkinter.Text(root, yscrollcommand = sy.set, xscrollcommand = sx.set, wrap = 'none', font=("微软雅黑", 10))
   text2.place(x=30,y=100, width=520, height=400)
   text2.config(wrap=tkinter.WORD)
   text2.see(tkinter.END);
   sx.config(command = text2.xview)
   sy.config(command = text2.yview)

3.3编写事件触发程序

3.3.1文件打开

def open_file():
   global file_path,phone_numbers,flag
   file_path = filedialog.askopenfilename()
   if file_path is not "":
       data=pandas.read_excel(file_path)
       phone = data['号码'].tolist()
       for i in range(len(phone)):
           phone_numbers.append(str(phone[i]))
       text2.insert(tkinter.END,"*********************************"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"打开文件成功!"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"文件路径为:"+file_path+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"文件内容如下:"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,data, '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"\n", '\n')
       text2.see(tkinter.END);
       flag = 1
   else:
       text2.insert(tkinter.END,"*********************************"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"您未打开文件!"+"\n", '\n')
       text2.see(tkinter.END);
       flag = 0

3.3.2文件保存

def save_file():
   file=open("recorde.txt","a+")
   content=str(text2.get("0.0", "end"))
   file.write(content)
   file.close()
   text2.insert(tkinter.END,"*********************************"+"\n", '\n')
   text2.see(tkinter.END);
   text2.insert(tkinter.END,"保存记录到recorde.txt成功!"+"\n", '\n')
   text2.see(tkinter.END);
   tkinter.messagebox.showinfo('提示','保存记录到recorde.txt成功!')
   text2.see(tkinter.END);

3.3.3帮助菜单

def Introduction():
   text2.insert(tkinter.END,"*********************************"+"\n", '\n')
   text2.see(tkinter.END);
   text2.insert(tkinter.END,"版本信息:短信息通知程序 V1.0"+"\n", '\n')
   text2.see(tkinter.END);
   tkinter.messagebox.showinfo('版本信息' ,'短信息通知程序 V1.0')
   text2.see(tkinter.END);

3.3.4发送按钮

def send_Button():
   global flag,phone_numbers
   appid = "你的appid"
   appkey = "你的appkey"
   template_id = "你的模板ID"
   sms_sign = "你的公众号名称"
   params = []
   ssl._create_default_https_context = ssl._create_unverified_context  
   ssender = SmsSingleSender(appid, appkey)    
   txt1 = str(text1.get("0.0", "end")).replace('\n', '')
   if flag==0:
       if ',' in txt1:
           phone_numbers=str(text1.get("0.0", "end")).replace('\n', '').split(',')
       elif ',' in txt1:
           phone_numbers=str(text1.get("0.0", "end")).replace('\n', '').split(',')
       else:
           phone_numbers=[]
           phone_numbers.append(txt1)
   else:
       flag = 0
   count=0
   for l in phone_numbers:
       count=count+len(str(l))
   if count%11==0:
       result = ""
       for i in range(len(phone_numbers)):
           try:
               result = ssender.send_with_param(86, phone_numbers[i],template_id, params, sign=sms_sign, extend="", ext="")
           except HTTPError as e:  
               result=e
           except Exception as e:  
               result=e
           text2.insert(tkinter.END,"*********************************"+"\n", '\n')
           text2.see(tkinter.END);
           text2.insert(tkinter.END,"信息发送至手机号:"+"\n"+str(phone_numbers[i])+"\n")
           text2.see(tkinter.END);
           text2.insert(tkinter.END,"信息发送返回结果:"+"\n")
           text2.see(tkinter.END);
           text2.insert(tkinter.END,str(result)+"\n", '\n')
           text2.see(tkinter.END);
           if result['errmsg']=='OK':
               text2.insert(tkinter.END,"信息发送至【"+str(phone_numbers[i])+"】成功!"+"\n")
               text2.see(tkinter.END);
           else:
               text2.insert(tkinter.END,"信息发送至【"+str(phone_numbers[i])+"】失败!"+"\n")
               text2.see(tkinter.END);
   else:
       text2.insert(tkinter.END,"*********************************"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"手机号码格式不正确"+"\n", '\n')
       text2.see(tkinter.END);

四、完整源代码

import tkinter
import tkinter.messagebox
from tkinter import filedialog
import pandas
import ssl
from qcloudsms_py import SmsSingleSender  
from qcloudsms_py.httpclient import HTTPError

def open_file():
   global file_path,phone_numbers,flag
   file_path = filedialog.askopenfilename()
   if file_path is not "":
       data=pandas.read_excel(file_path)
       phone = data['号码'].tolist()
       for i in range(len(phone)):
           phone_numbers.append(str(phone[i]))
       text2.insert(tkinter.END,"*********************************"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"打开文件成功!"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"文件路径为:"+file_path+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"文件内容如下:"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,data, '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"\n", '\n')
       text2.see(tkinter.END);
       flag = 1
   else:
       text2.insert(tkinter.END,"*********************************"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"您未打开文件!"+"\n", '\n')
       text2.see(tkinter.END);
       flag = 0

def save_file():
   file=open("recorde.txt","a+")
   content=str(text2.get("0.0", "end"))
   file.write(content)
   file.close()
   text2.insert(tkinter.END,"*********************************"+"\n", '\n')
   text2.see(tkinter.END);
   text2.insert(tkinter.END,"保存记录到recorde.txt成功!"+"\n", '\n')
   text2.see(tkinter.END);
   tkinter.messagebox.showinfo('提示','保存记录到recorde.txt成功!')
   text2.see(tkinter.END);

def Introduction():
   text2.insert(tkinter.END,"*********************************"+"\n", '\n')
   text2.see(tkinter.END);
   text2.insert(tkinter.END,"版本信息:短信息通知程序 V1.0"+"\n", '\n')
   text2.see(tkinter.END);
   tkinter.messagebox.showinfo('版本信息' ,'短信息通知程序 V1.0')
   text2.see(tkinter.END);

def send_Button():
   global flag,phone_numbers
   appid = "你的appid"
   appkey = "你的appkey"
   template_id = "你的模板ID"
   sms_sign = "你的公众号名称"
   params = []
   ssl._create_default_https_context = ssl._create_unverified_context  
   ssender = SmsSingleSender(appid, appkey)    
   txt1 = str(text1.get("0.0", "end")).replace('\n', '')
   if flag==0:
       if ',' in txt1:
           phone_numbers=str(text1.get("0.0", "end")).replace('\n', '').split(',')
       elif ',' in txt1:
           phone_numbers=str(text1.get("0.0", "end")).replace('\n', '').split(',')
       else:
           phone_numbers=[]
           phone_numbers.append(txt1)
   else:
       flag = 0
   count=0
   for l in phone_numbers:
       count=count+len(str(l))
   if count%11==0:
       result = ""
       for i in range(len(phone_numbers)):
           try:
               result = ssender.send_with_param(86, phone_numbers[i],template_id, params, sign=sms_sign, extend="", ext="")
           except HTTPError as e:  
               result=e
           except Exception as e:  
               result=e
           text2.insert(tkinter.END,"*********************************"+"\n", '\n')
           text2.see(tkinter.END);
           text2.insert(tkinter.END,"信息发送至手机号:"+"\n"+str(phone_numbers[i])+"\n")
           text2.see(tkinter.END);
           text2.insert(tkinter.END,"信息发送返回结果:"+"\n")
           text2.see(tkinter.END);
           text2.insert(tkinter.END,str(result)+"\n", '\n')
           text2.see(tkinter.END);
           if result['errmsg']=='OK':
               text2.insert(tkinter.END,"信息发送至【"+str(phone_numbers[i])+"】成功!"+"\n")
               text2.see(tkinter.END);
           else:
               text2.insert(tkinter.END,"信息发送至【"+str(phone_numbers[i])+"】失败!"+"\n")
               text2.see(tkinter.END);
   else:
       text2.insert(tkinter.END,"*********************************"+"\n", '\n')
       text2.see(tkinter.END);
       text2.insert(tkinter.END,"手机号码格式不正确"+"\n", '\n')
       text2.see(tkinter.END);

def init_frame(root):  
   menu=tkinter.Menu(root)
   submenu1 = tkinter.Menu(menu, tearoff=0)
   submenu1.add_command(label='打开', command=open_file)
   submenu1.add_command(label='保存', command=save_file)
   menu.add_cascade(label='文件',menu=submenu1)
   submenu3 = tkinter.Menu(menu, tearoff=0)    
   submenu3.add_command(label='版本信息', command=Introduction)
   menu.add_cascade(label='帮助',menu=submenu3)
   root.config(menu=menu)
   global text1,text2
   label1 = tkinter.Label(root, text="手机号码:", font=("微软雅黑", 18))
   label1.place(x=30,y=32)
   text1 = tkinter.Text(root, wrap = 'none', font=("微软雅黑", 18))
   text1.place(x=30+120,y=30, width=520-120-100, height=40)
   button=tkinter.Button(root, text='发送信息',width=10, height=20, bg='gray', fg='white', font=("微软雅黑", 12),command=send_Button)
   button.place(x=480,y=30,width=70, height=40)
   sx = tkinter.Scrollbar(root,orient = tkinter.HORIZONTAL)
   sx.pack(side = tkinter.BOTTOM,fill = tkinter.X)
   sy = tkinter.Scrollbar(root)
   sy.pack(side = tkinter.RIGHT,fill = tkinter.Y)    
   text2 = tkinter.Text(root, yscrollcommand = sy.set, xscrollcommand = sx.set, wrap = 'none', font=("微软雅黑", 10))
   text2.place(x=30,y=100, width=520, height=400)
   text2.config(wrap=tkinter.WORD)
   text2.see(tkinter.END);
   sx.config(command = text2.xview)
   sy.config(command = text2.yview)
   root.update()

if __name__=="__main__":
   global flag
   flag = 0
   global phone_numbers
   phone_numbers = []
   root = tkinter.Tk()
   root.title("短信息发送程序")
   root.geometry('600x520')
   init_frame(root)
   root.mainloop()

来源:https://blog.csdn.net/biggbang/article/details/127231278

标签:Python,短信,发送
0
投稿

猜你喜欢

  • Python运行不显示DOS窗口的解决方法

    2021-01-18 08:06:16
  • python3中关于excel追加写入格式被覆盖问题(实例代码)

    2022-10-18 14:23:25
  • javascript调试之DOM断点调试法使用技巧分享

    2023-09-24 12:24:18
  • MySQL表设计优化与索引 (四)

    2010-10-25 19:50:00
  • python数据处理之如何选取csv文件中某几行的数据

    2022-11-22 23:18:54
  • PHP实现二维数组中的查找算法小结

    2023-09-08 05:08:24
  • Python检测端口IP字符串是否合法

    2023-09-03 11:51:26
  • Jupyter Notebook的连接密码 token查询方式

    2023-10-21 23:51:47
  • 用书的概念理解小网站结构

    2007-10-31 18:08:00
  • 网站程序员如何应对web标准

    2007-05-11 16:52:00
  • [翻译]标记语言和样式手册 Chapter 4 引用

    2008-01-20 14:19:00
  • Python设计模式中的行为型策略模式

    2023-02-28 17:04:25
  • mysql使用LOAD语句批量录入数据

    2010-03-18 16:19:00
  • python面向对象版学生信息管理系统

    2022-07-23 02:16:57
  • asp使用 sql_dmo 添加新数据库代码

    2010-03-17 20:57:00
  • Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例

    2023-11-27 21:26:53
  • php使用Cookie实现和用户会话的方法

    2023-07-08 15:30:49
  • Python程序中使用SQLAlchemy时出现乱码的解决方案

    2022-11-07 23:19:28
  • 详解python statistics模块及函数用法

    2021-09-18 00:08:19
  • CentOS中使用virtualenv搭建python3环境

    2022-08-30 07:28:43
  • asp之家 网络编程 m.aspxhome.com