思路

  1. 从数据库读取报表数据
  2. 将报表数据以excel形式存到本地
  3. 将本地报表文件以附件形式添加到邮件发送
  4. 设置定时任务

代码

import pymysql
import pandas as pd
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import datetime
import schedule,timedef create_report(host,port,user,passwd,db,sql,annex_path):'从数据库读取报表数据,以excel形式将报表存到本地'conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db)# 连接mysqlcursor = conn.cursor()#创建游标cursor.execute(sql)#执行sql语句result = cursor.fetchall()#获取执行结果    result=[list(x) for x in result]col_result = cursor.description  # 获取查询结果的字段描述columns=[x[0] for x in col_result]data=pd.DataFrame(result,columns=columns)data.to_excel(annex_path,index=False)cursor.close()#关闭游标conn.close()#关闭连接def send_email(file_name,annex_path):'#创建报表和发送邮件'  try:file_name_new=str(datetime.datetime.now().date())+file_name#根据当前日期拼接附件名称annex_path_new=annex_path+'/'+file_name_new  #拼接报表存储完整路径 create_report(host,port,user,passwd,db,sql,annex_path_new)#创建报表#传入邮件发送者、接受者、抄送者邮箱以及主题    message = MIMEMultipart()message['From'] = sendermessage['To'] = ','.join(receiver)message['Cc'] = ";".join(Cc_receiver)message['Subject'] = Header(str(datetime.datetime.now().date())+title, 'utf-8')#添加邮件内容text_content = MIMEText(content)message.attach(text_content)#添加附件    annex = MIMEApplication(open(annex_path_new, 'rb').read()) #打开附件annex.add_header('Content-Disposition', 'attachment', filename=file_name_new)   message.attach(annex)#image_path = 'C:/Users/yang/Desktop/1.png'#image = MIMEImage(open(image_path , 'rb').read(), imageFile.split('.')[-1])#image.add_header('Content-Disposition', 'attachment', filename=image_path.split('/')[-1])#message.attach(image)#登入邮箱发送报表server = smtplib.SMTP(smtp_ip)#端口默认是25,所以不用指定server.login(sender,password)server.sendmail(sender, receiver, message.as_string())server.quit()print('success!',datetime.datetime.now())except smtplib.SMTPException as e:print('error:',e,datetime.datetime.now()) #打印错误if __name__ == '__main__':
#参数设置#数据库参数设置host='localhost'#数据库ip地址port=3306#端口user='root'#账户passwd='XXX'#密码db='XXX'#数据库名称sql="SELECT cid,max(score) as max_score FROM sc group by cid;"#报表查询语句#发送邮件参数设置   sender = 'XXX@126.com'#发送者邮箱password = 'XXX'#发送者邮箱授权码smtp_ip='smtp.126.com'#smtp服务器ip,根据发送者邮箱而定receiver = ['XXX@qq.com','XXX@qq.com']#接收者邮箱 Cc_receiver=['XXX@qq.com','XXX@126.com']#抄送者邮箱title='订单日报'#邮件主题content = 'hello,这是今天的订单日报!'#邮件内容file_name='订单日报.xlsx'#报表名称annex_path='C:/Users/yang/Desktop/'#报表存储路径,也是附件路径ts='10:13'#发送邮件的定时设置,每天ts时刻运行#自动创建报表并发送邮件print('邮件定时发送任务启动中.......')schedule.every().day.at(ts).do(send_email, file_name,annex_path) # 每天某时刻运行   while True:schedule.run_pending() # 运行所有可运行的任务time.sleep(43200)#因为每次发送邮件的间隔时间是一天左右,所以休眠时间可以设长些

结果

授权码的获取

其中邮箱的授权码不是邮箱的密码,而是邮箱授权给第三方软件登陆邮箱的授权。以QQ邮箱为例,获取授权码步骤如下:

(1)登陆邮箱,点开设置:

(2)选择账户,找到开启SMTP,点击开启:

(3)点击开启后,需要本人身份验证:

(4)验证成功后,会出现授权码:

这个授权码,就是要在连接邮件的时候填上。

附:常用SMTP和POP服务器地址

1、QQ邮箱(mail.qq.com)
    POP3服务器地址:pop.qq.com(端口:110)
    SMTP服务器地址:smtp.qq.com(端口:25)
    
    2、搜狐邮箱(sohu.com):
    POP3服务器地址:pop3.sohu.com(端口:110)
    SMTP服务器地址:smtp.sohu.com(端口:25)
    
    3、HotMail邮箱(hotmail.com):
    POP3服务器地址:pop.live.com(端口:995)
    SMTP服务器地址:smtp.live.com(端口:587)
    
    4、移动139邮箱:
    POP3服务器地址:POP.139.com(端口:110)
    SMTP服务器地址:SMTP.139.com(端口:25)
    
    5、景安网络邮箱:
    POP3服务器地址:POP.zzidc.com(端口:110)
    SMTP服务器地址:SMTP.zzidc.com(端口:25)
    
    6、新浪邮箱
    smtp.sina.com(端口:25)
    
    7、新浪VIP
    SMTP服务器地址:smtp.vip.sina.com(端口:25)
    
    8、126邮箱
    SMTP服务器地址:smtp.126.com(端口:25)
    
    9、139邮箱
    SMTP服务器地址:smtp.139.com(端口:25)
    
    10、163网易邮箱
    SMTP服务器地址:smtp.163.com(端口:25)

如果对你有帮助,请点下赞,予人玫瑰手有余香!

时时仰望天空,理想就会离现实越来越近!

python3自动发送邮件并添加附件相关推荐

  1. python自动发送邮件(html、附件等),qq邮箱和网易邮箱发送和回复

    在python中,我们可以用程序来实现向别人的邮箱自动发送一封邮件,甚至可以定时,如每天8点钟准时给某人发送一封邮件.今天,我们就来学习一下,如何向qq邮箱,网易邮箱等发送邮件. 一.获取邮箱的SMT ...

  2. pythonmail添加附件_Python 发送邮件可以添加附件

    1.[代码][Python]代码 #!/usr/bin/python from email.MIMEText import MIMEText from email.MIMEMultipart impo ...

  3. JAVA发送邮件以及添加附件

    https://www.open-open.com/code/view/1420037773921

  4. Android 发送邮件信息,附带附件

    直接上demo代码: MainActivity.java package com.example.androidemaildemo;import java.util.Properties;import ...

  5. java 发送邮件添加附件_java邮件自动发送时添加网络附件

    查了很多资料都是使用本地资源作为附件发送.但是数据和程序分开时,还需要先下载数据,保存到本地再发送邮件.查了很多资料后,发现apach提供了很好的一个commons-mail.jar包,做了很好的封装 ...

  6. python 实现SMTP发送邮件(四)-添加附件

    Python实现SMTP发送邮件(四)-添加附件 [Python]  纯文本查看  复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 ...

  7. java 添加附件_java发送邮件(一)--补充添加附件

    今天来记录一下如何使用java来发送邮件 背景 之前项目有个需求,当产品出现故障时会把情况上送给服务器,服务器发送邮件将故障产品的位置以及故障信息等告知维修人员.发送邮件的接口不是我负责的,但是有兴趣 ...

  8. java实现发送邮件功能(可以添加附件)

    记录一下在java中发送邮件的实现方式,下面这个工具类是根据在网上查阅的资料自己整理出来的. 类中只有两个方法: 1.第一个就是普通的发送文本内容邮件的方法. 2.第二个是能发送附件邮件的方法.如果还 ...

  9. python3自动读取QQ邮箱的附件 脚本

    python3自动读取QQ邮箱的附件 脚本 环境 python3 实现,QQ 邮箱,开启SMTP /POP 服务 注意 账号密码:密码 不是账号密码,而是认证码.需要开启服务获取. 参考 https: ...

  10. python3实现自动发送邮件

    1 电子邮件协议 图来自计算机网络谢希仁一书 SMTP,用于用户向邮件服务器发送邮件或在邮件服务器之间发送邮件. POP3,用于用户从邮件服务器读取邮件,在客户端的操作(如移动邮件.标记已读等),不会 ...

最新文章

  1. Centos安装、配置nginx
  2. 第7届UBBF在迪拜举办 加强网络设施建设将加速产业发展成为共识
  3. python plot map_使用matplotlibbasemap在边界打印
  4. 给恋爱中的女孩的忠告
  5. JS 客户端浏览器操作、BOM、渗透客户端浏览器(windows对象:screen屏幕操作、location浏览器域名、history浏览器历史、Navigator浏览器信息、cookie)
  6. CSS强制英文、中文换行与不换行
  7. 设计素材模板|春节要来了,素材准备好了么?
  8. 转: MATLAB: cat函数使用
  9. HID API for Linux, Mac OS X, and Windows
  10. 入门 Angular 2 杂记
  11. 计算机的桌面助手,正规的电脑桌面一键整理助手
  12. 改进网易云音乐的“音乐社交”构想
  13. 小皮phpstudy中的mysql无法启动,启动就马上停止
  14. 团队任务5:事后诸葛亮会议
  15. python爬虫学习14
  16. HDU 3713 Double Maze
  17. Spring Boot 自定义注解支持EL表达式(基于 MethodBasedEvaluationContext 实现)
  18. 实现时间的计算: 要求用户输入身份证号,若格式有误,要求其重新输入。然后根据身份证号码输出20岁生日所在周的周三的日期
  19. 【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票
  20. 站长工具大全-站长软件网站-站长工具网站-站长必备工具免费

热门文章

  1. 英语背单词有用吗_学英语千万不要背单词 背单词有效吗
  2. LVS负载均衡器的原理简单介绍
  3. 小猪短租网requests库使用
  4. wifi已连接不可上网服务器无响应,为什么手机连上wifi却上不了网
  5. html中实现雪花飞舞,经典散文里雪花飞舞
  6. 深度学习与计算机视觉教程(17) | 深度强化学习 (马尔可夫决策过程,Q-Learning,DQN)(CV通关指南·完结)
  7. c 抓取百度页面html,搜索引擎百度蜘蛛详解,百度蜘蛛IP分析
  8. 三国谋士排名(转载)
  9. 淘宝购买的ESP-CAM+SD内存卡做一个200W像素的相机arduino IDE开发过程
  10. H.265流媒体播放器EasyPlayer.js如何调用VUE?