群发指定用户短信
时间:2019-08-20
本文章向大家介绍群发指定用户短信,主要包括群发指定用户短信使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
# coding=utf8 import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import sys import pymysql sender = '' # 发件人邮箱登录账号 sender_pass = '' # 发件人邮箱登录密码 fail_receiver = [] def send_mail(sender, sender_pass, receiver, content): SMTP_SERVER = 'mail.broada.com' message = MIMEMultipart() message.attach(MIMEText(content, "plain", "utf-8")) message['from'] = sender message['to'] = receiver message['subject'] = '虚拟机使用情况检查结果'.decode('utf8') server = smtplib.SMTP_SSL(SMTP_SERVER, 465) server.set_debuglevel(1) server.login(sender, sender_pass) server.sendmail(from_addr=sender, to_addrs=[receiver], msg=message.as_string()) server.quit() print("邮件发送结束") def get_vms(): global excludes,raw_num,add_data,update_data,upper_data db = pymysql.connect('', port=3306, user='root', passwd='', db='vm_resource') vm_infos={} vm_users={} sql = "select t.vmip,t.owner from (select a.vmip,a.vmname,a.owner,a.vmcreatetime,a.vmreleasetime,a.lastpowertime," \ "(select ROUND(sum(b.value)/count(b.value),2) from vm_memory b where a.vmip=b.ip) value," \ "IFNULL((SELECT status from vm_status where ip=a.vmip), '停机') status " \ "from vminfo a where a.status='used' and a.owner not in('unknown','',' ' ) ) t where t.value<=10" with db.cursor() as cursor: cursor.execute(sql) datas = cursor.fetchall() for i in datas: if i[1] in excludes: continue #数据库记录数修改 if raw_num.get(i[0]) and int(raw_num.get(i[0]))>=3: upper_data.update({i[0]:int(raw_num.get(i[0]))+1}) continue elif not raw_num.get(i[0]): add_data.update({i[0]:1}) elif raw_num.get(i[0]) and int(raw_num.get(i[0]))<3: update_data.update({i[0]:int(raw_num.get(i[0]))+1}) if not vm_infos.get(i[1]): vm_infos.update({i[1]: []}) vm_infos[i[1]].append(i[0]) user = i[1].split('@')[0] if not vm_users.get(user): vm_users.update({user: []}) vm_users[user].append(i[0]) return vm_infos,vm_users def change_db_datas(): global add_data,update_data,upper_data print update_data db = pymysql.connect('', port=3306, user='root', passwd='', db='') if add_data: insert_data=[] for ip,num in add_data.items(): insert_data.append((ip,num)) with db.cursor() as cursor: sql = "insert into vm_report_nums(ip,num) values(%s,%s)" cursor.executemany(sql, insert_data) db.commit() if update_data: insert_data = [] for ip, num in update_data.items(): insert_data.append((num,ip)) with db.cursor() as cursor: sql = "UPDATE vm_report_nums SET num=%s WHERE ip=%s;" cursor.executemany(sql, insert_data) db.commit() if upper_data: insert_data = [] for ip, num in upper_data.items(): insert_data.append((num, ip)) with db.cursor() as cursor: sql = "UPDATE vm_report_nums SET num=%s WHERE ip=%s;" cursor.executemany(sql, insert_data) db.commit() def get_db_datas(): ips={} db = pymysql.connect('', port=3306, user='root', passwd='', db='') sql = "select ip,num from vm_report_nums" with db.cursor() as cursor: cursor.execute(sql) datas = cursor.fetchall() for i in datas: ips.update({i[0]:i[1]}) return ips if __name__ == '__main__': excludes='' excludes=excludes.split(',') add_data={} update_data={} upper_data = {} raw_num = get_db_datas() datas,vm_users=get_vms() # print datas ips=[] try: for user,vms in vm_users.items(): for i in vms: ips.append(i) data_res='' if datas.get(user+'@.'): data_res+='' if datas.get(user+'@.'): data_res += ' 您的申请清单如下:\n{}""".format(','.join(vms),data_res) send_mail(sender, sender_pass, user+'@.com', result.decode('utf8')) change_db_datas() except Exception as e: print e sys.exit(1)
原文地址:https://www.cnblogs.com/slqt/p/11381852.html
- 前端游戏编程基础-如何实现Canvas图像的拖拽、点击等操作
- hdu 4081 Qin Shi Huang's National Road System (次小生成树)
- python读取系统信息
- hdu 3948 Portal (kusral+离线)
- linuxmint下pycharm创建桌面快捷方式
- hdu 1811 Rank of Tetris (并查集+拓扑排序)
- Pycharm常用技巧
- hdu 1598 find the most comfortable road(枚举+卡鲁斯卡尔最小生成树)
- 查询IP地址归属详情
- oracle commit详解
- hdu 4315 Climbing the Hill(阶梯博弈转nim博弈)
- iftop实时网络流量监控工具的安装使用
- hdu 3908 Triple(组合计数、容斥原理)
- hdu 4034 Graph (floyd的深入理解)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP-FPM的配置与优化讲解
- python为什么会环境变量设置不成功
- keras自动编码器实现系列之卷积自动编码器操作
- PHP数字金额转换成中文大写显示
- 详解Python多线程下的list
- Python 字符串池化的前提
- PHP抽象类基本用法示例
- keras分类模型中的输入数据与标签的维度实例
- keras的三种模型实现与区别说明
- PHP智能识别收货地址信息实例
- Keras 在fit_generator训练方式中加入图像random_crop操作
- PHP面向对象程序设计继承用法简单示例
- php根据命令行参数生成配置文件详解
- PHP使用SOAP调用API操作示例
- 使用Zookeeper分布式部署PHP应用程序