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使用urllib2实现发送带cookie的请求
Apr 28 Python
Python的Django框架中的Context使用
Jul 15 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
qpython3 读取安卓lastpass Cookies
Jun 19 Python
Python PO设计模式的具体使用
Aug 16 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
Django CSRF认证的几种解决方案
Mar 03 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
Numpy一维线性插值函数的用法
Apr 22 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
python爬虫scrapy图书分类实例讲解
Nov 23 Python
pyqt5实现井字棋的示例代码
Dec 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
javascript Excel操作知识点
2009/04/24 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
python实现简单ftp客户端的方法
2015/06/28 Python
Python pymongo模块用法示例
2018/03/31 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
python3字符串操作总结
2019/07/24 Python
Pytorch之Variable的用法
2019/12/31 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
优良学风班总结材料
2014/02/08 职场文书
学期评语大全
2014/04/30 职场文书
公司承诺书格式
2014/05/21 职场文书
新教师教学工作总结
2015/08/14 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
MySql数据库触发器使用教程
2022/06/01 MySQL