python3+mysql查询数据并通过邮件群发excel附件


Posted in Python onFebruary 24, 2018

本文实例为大家分享了python3邮件群发excel附件的具体代码,供大家参考,具体内容如下

连接、查询mysql,导入到excel文件,定时群发邮件与附件。
主要用到pymysql ,smtplib , xlwt

#1、导入模块

import pymysql #Python3的mysql模块,Python2 是mysqldb
import os
import datetime #定时发送,以及日期
import shutil #文件操作
import smtplib #邮件模块
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import time
import xlwt #excel写入

#2、连接并查询mysql

def eMysql(mysql_host,mysql_port,mysql_user,mysql_password,mysql_db,sql):
 try:
  db = pymysql.connect(host=mysql_host,port=mysql_port,user=mysql_user, password=mysql_password, db=mysql_db,charset = 'utf8')#连接数据库编码注意是utf8,不然中文结果输出会乱码
  print("MYSQL CONNECTED.")# 连接数据库
  cursor = db.cursor()# 使用cursor()方法获取操作游标
  cursor.execute(sql)# 执行SQL语句
  print('SQL EXECUTED')
  results = cursor.fetchall()# 结果
  return results
  print('RESULTS EXECUTED')
  db.close() # 关闭数据库连接
  print('MYSQL CLOSED')
 except:
  print('SQL FAILED')

#3、写入excel

def eWrite(fLocate,results,file_sheet,file_subject,style0):
 try:
  if os.path.exists(fLocate):
   os.remove(fLocate) # 如果文件存在,则删除
  f = xlwt.Workbook(encoding='utf-8') #打开excel文件
  fs = f.add_sheet(file_sheet) #sheet名
  subject = list(file_subject) #列表化
  for i in range(len(subject)): #找到日期列
   if '日期' in subject[i]:
    col_num=i
  for i in range(len(subject)): #sheet标题
   fs.write(0, i, subject[i])

  for i in range(len(results)): #sheet数据,日期列格式为date
   for j in range(len(results[0])):
    if j== col_num:
     fs.write(i + 1, j, results[i][j],style0)
    else:
     fs.write(i + 1, j, results[i][j])


  for i in range(10): #单元格宽度为
   fs.col(i).width=3333

  print("WRITE FINISHED")
  f.save(fLocate)
 except :
  print ("WRITE FAILED")

#4、发送邮件

def eSend(sender,receiver,username,password,smtpserver,subject,e_content,file_path,file_name):
 try:
#邮件头
  message = MIMEMultipart()
  message['From'] = sender#发送
  message['To'] = ",".join(receiver)#收件
  message['Subject'] = Header(subject, 'utf-8')
  message.attach(MIMEText(e_content, 'plain', 'utf-8'))# 邮件正文

# 构造附件
  att1 = MIMEText(open(file_path+file_name,'rb').read(), 'base64', 'utf-8')
  att1["Content-Type"] = 'application/octet-stream'
  att1["Content-Disposition"] = "attachment;filename="+file_name
  message.attach(att1)

#执行
  smtp = smtplib.SMTP()
  smtp.connect(smtpserver) #连接服务器
  smtp.login(username, password) #登录
  smtp.sendmail(sender, receiver, message.as_string()) #发送
  smtp.quit()
  print("SEND")
 except:
  print("SEND FAILED")

#5、配置与执行

while True:
#配置
 #__time_____
 ehour=5#定时小时
 emin=21#定时分钟
 esec=41#定时秒
 current_time = time.localtime(time.time())  #当前时间date
 cur_time = time.strftime('%H%M', time.localtime(time.time()))    #当前时间str
 #__mysql_____
 mysql_host = mysql_host #登录host
 mysql_port =mysql_port #登录port
 mysql_user = mysql_user #登录名
 mysql_password = mysql_password #登录密码
 mysql_db = mysql_db #数据库
 sql = sql.encode('utf-8') #sql查询语句编码
 #__email_____
 sender = sender #发件人邮箱
 receiver = ['453032441@qq.com'] #收件人邮箱,可以多个(列表形式)群发
#
 username = username  #发件人姓名
 password = password #smtp密码,qq是给你分配一串,163是自己设置
 smtpserver = smtpserver #邮箱服务器
 subject = "Hey,here's something interesting"  #邮件标题
 e_content = '{0:^27}\n{1:^27}\n{2:^25}\n{3:^25}'.format('i','/ \\','(-----)','(--------)') #邮件正文 #邮件正文
 #__file_____
 file_path = "D:/" #文件位置
 file_name="shit.xls" #文件名
 fLocate = file_path + file_name  #文件路径
 file_subject='Gave', 'you', 'a', 'piece', 'of', 'shit.' #sheet标题
 file_sheet='ok' #sheet名
 style0=xlwt.XFStyle()
 style0.num_format_str='YYYY-MM-DD'
#操作
 if ((current_time.tm_hour == ehour) and (current_time.tm_min == emin) and (current_time.tm_sec == esec)):
  print ("START")
  results=eMysql(mysql_host,mysql_port,mysql_user,mysql_password,mysql_db,sql)
  eWrite(fLocate, results, file_sheet, file_subject,style0)
  eSend(sender, receiver, username, password, smtpserver, subject, e_content, file_path,file_name)
  print(cur_time)
 time.sleep(1)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
使用python实现CGI环境搭建过程解析
Apr 28 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Python3实现带附件的定时发送邮件功能
Dec 22 #Python
python正则实现提取电话功能
Feb 24 #Python
python3实现公众号每日定时发送日报和图片
Feb 24 #Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 #Python
使用python和pygame绘制繁花曲线的方法
Feb 24 #Python
python3操作微信itchat实现发送图片
Feb 24 #Python
python自动12306抢票软件实现代码
Feb 24 #Python
You might like
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Python list操作用法总结
2015/11/10 Python
利用Python爬取可用的代理IP
2016/08/18 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
Python重新加载模块的实现方法
2018/10/16 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
Django choices下拉列表绑定实例
2020/03/13 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
eBay美国官网:eBay.com
2020/10/24 全球购物
StringBuilder和String的区别
2015/05/18 面试题
学校募捐倡议书
2014/05/14 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
保送生自荐信
2015/03/06 职场文书
高中运动会广播稿
2015/08/19 职场文书
简短清晨问候语
2015/11/10 职场文书
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫