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获取beautifulphoto随机某图片代码实例
Dec 18 Python
python自动化测试之连接几组测试包实例
Sep 28 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
Python正规则表达式学习指南
Aug 02 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
哪些是python中web开发框架
Jun 17 Python
Python中bisect的用法及示例详解
Jul 20 Python
python爬取天气数据的实例详解
Nov 20 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
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
linux下编译安装memcached服务
2014/08/03 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
JavaScript事件列表解说
2006/12/22 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python正则表达式的使用范例详解
2014/08/08 Python
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
python怎么调用自己的函数
2020/07/01 Python
超市中秋节活动方案
2014/02/12 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
华清池导游词
2015/02/02 职场文书
党员承诺书范文2015
2015/04/27 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android
Redis实现分布式锁的五种方法详解
2022/06/14 Redis