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中用sleep()方法操作时间的教程
May 22 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python实现朴素贝叶斯算法
Nov 19 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
python能开发游戏吗
Jun 11 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
python搜索算法原理及实例讲解
Nov 18 Python
pandas实现导出数据的四种方式
Dec 13 Python
Django后端按照日期查询的方法教程
Feb 28 Python
对PyTorch中inplace字段的全面理解
May 22 Python
Python可视化学习之seaborn调色盘
Feb 24 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php获取根域名方法汇总
2014/10/28 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
Js动态创建div
2008/09/25 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
python实现将内容分行输出
2015/11/05 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
python文件读取失败怎么处理
2020/06/23 Python
Python同时迭代多个序列的方法
2020/07/28 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
公司门卫工作职责
2014/06/28 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
2014年采购工作总结
2014/11/20 职场文书
投资申请报告
2015/05/19 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python