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 相关文章推荐
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
Python中turtle作图示例
Nov 15 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
python对文件目录的操作方法实例总结
Jun 24 Python
在python中画正态分布图像的实例
Jul 08 Python
详解Python对JSON中的特殊类型进行Encoder
Jul 15 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 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注释实例技巧
2008/10/03 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
学习委员自我鉴定
2014/01/13 职场文书
狼和鹿教学反思
2014/02/05 职场文书
护士个人自我鉴定
2014/03/24 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
党员个人年度总结
2015/02/14 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
限期整改通知书
2015/04/22 职场文书
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
解析python中的jsonpath 提取器
2022/01/18 Python