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的轻便web框架Bottle
Apr 08 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
深入理解Python中字典的键的使用
Aug 19 Python
如何在Python中编写并发程序
Feb 27 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
Python实现运行其他程序的四种方式实例分析
Aug 17 Python
Python 多进程和数据传递的理解
Oct 09 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
Python简单实现词云图代码及步骤解析
Jun 04 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中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
python字典多条件排序方法实例
2014/06/30 Python
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
python将unicode转为str的方法
2017/06/21 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
使用python+whoosh实现全文检索
2019/12/09 Python
python getopt模块使用实例解析
2019/12/18 Python
Python ORM编程基础示例
2020/02/02 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
什么是python类属性
2020/06/10 Python
用Python开发app后端有优势吗
2020/06/29 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
2015年重阳节主持词
2015/07/04 职场文书
2015年除四害工作总结
2015/07/23 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis