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压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
Python中文竖排显示的方法
Jul 28 Python
Python numpy 常用函数总结
Dec 07 Python
Python装饰器用法示例小结
Feb 11 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
python调用摄像头显示图像的实例
Aug 03 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
如何使用Python自动控制windows桌面
Jul 11 Python
django中的图片验证码功能
Sep 18 Python
如何把python项目部署到linux服务器
Aug 26 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 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
附件名前加网站名
2008/03/23 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
python3实现名片管理系统
2020/11/29 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python interpolate插值实例
2020/07/06 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
幼教求职信
2014/03/12 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers