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实现二分法算法实例
Feb 02 Python
简单了解Python中的几种函数
Nov 03 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python collections模块使用方法详解
Aug 28 Python
Python基于WordCloud制作词云图
Nov 29 Python
python如何快速生成时间戳
Jul 21 Python
python 8种必备的gui库
Aug 27 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
python 用递归实现通用爬虫解析器
Apr 16 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 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开发中的错误收集,不定期更新。
2011/02/03 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
javascript加号"+"的二义性说明
2013/03/04 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
做web开发 先学JavaScript
2014/12/12 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
flask项目集成swagger的方法
2020/12/09 Python
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
优秀应届毕业生自荐信
2013/11/16 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
英文邀请函
2015/02/02 职场文书
话题作文之成长
2019/12/09 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书