打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PYTHON自动发送报表邮件

    要实现上述的功能的话我们需要以下几步:

1、做好报表模板

2、更新报表数据

3、发送报表邮件


下面我们就用一个例子来给大家演示一下:

1、报表模板

我们选用一份保险公司每天完成保单的数据进行模板制作,要求一份为员工当月累计交单,一份为网点整体交单,效果如下:

2、报表数据更新

我们直接使用之前跟大家分享过的数据分析进阶技能——Excel连接数据库就可以,这样更新数据时直接右键刷新就可以了,也方便利用PYTHON进行自动化的刷新

假设已经做好的报表路径为

Path=D:\test\保单统计表.xlsx

使用PYTHON自动刷新代码:

# -*- coding:utf-8 -*-
from win32com.client import DispatchEx
import time
import os
import traceback
Path='D:\\test\\保单统计表.xlsx'
class ExcelApp:
    def __init__(self):
        self.app = DispatchEx('Excel.Application')
        self.app.EnableEvents = False
        self.app.DisplayAlerts = 0  # 不显示弹窗
        self.app.Visible = False    # 隐藏进程

    def quit(self):
        self.app.DisplayAlerts = 1
        self.app.Visible = True
        self.app.Quit()
        del self.app

    def open(self, Path):
        workbook = self.app.Workbooks.Open(Path, False, False, None)
        return workbook
    
    def refresh(self, Path):
        workbook = self.open(Path)
        workbook.RefreshAll()
        workbook.Save()
        workbook.Close()
try:
    t = time.time()
    print('正在刷新 >>> %s' % Path)
    excel = ExcelApp()
    excel.refresh(Path)
    t = time.strftime('%H:%M:%S', time.gmtime(time.time() - t))
    print('刷新完成 >>> 耗时:%ss %s' % (t, Path))
except Exception as e:
    print('刷新失败 >>> %s' % Path)
    print(traceback.format_exc())
    excel.quit()
    raise
excel.quit()

效果如下:


改了下表格数据,自动刷新后变为:




3、代码发送邮件

邮箱配置为

Host = mail.xxx.com #邮箱服务器  

Port = yy #邮箱端口,一般25

User = name@xxx.com #用户名

Password = pazzzz #密码

To=toname@yyyy.com #收件人

Subject=title #邮件主题

使用PYTHON发邮件代码:

# -*- coding:utf-8 -*-import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.application import MIMEApplicationHost ='mail.xxx.com'Port = 25User ='name@xxx.com'Password = 'pazzzz'To='toname@yyy.com'Subject='保单情况'class EmailApp:    def __init__(self, host, port=25):        self.host = host        self.port = port        self.user = None        self.mail = smtplib.SMTP(host, port, timeout=10)    def login(self, user, password):        self.user = user        self.mail.login(user, password)        return self    def send(self, To, Cc=None, subject=None, **kwargs):        msg = MIMEMultipart()        msg['From'] = self.user        msg['To'] = To        msg['Subject'] = Subject        # ---这是正文部分---        text = kwargs.get('text', '')        part = MIMEText(text)        msg.attach(part)              # ---这是附件部分---        file = kwargs.get('file', '')        filename = os.path.basename(file)        part = MIMEApplication(open(file, 'rb').read())        part.add_header('content-disposition', 'attachment',                        filename=('gbk', '', filename))        msg.attach(part)        self.mail.sendmail(self.user, To, msg.as_string())    def quit(self):        self.mail.quit()        del self.mailtry:    email = EmailApp(Host, port=Port)    email.login(User, Password)    text = '大家好,这是今天的%s报表更新,请查收!' % Subject    email.send(To=To, subject=Subject, file=Path, text=text)    print('发送成功 >>> %s' % Path)except Exception as e:    print('邮件发送失败 >>> %s' % Path)    print(traceback.format_exc())    email.quit()    raiseemail.quit()

效果如下:




到此我们就实现了使用代码完成报表刷新和发送的任务,再设置个任务计划程序定时跑PYTHON就可以了:

1、把上面的合成代码存储为文件'sendmail.py'

2、将下面的文本复制进记事本并更改后缀为bat,命名为“run_sendmail.bat”


@echo offcd /D  D:\test  #第一步代码存贮的路径@echo onpython sendmail.py


样式参考:


3、邮件“计算机”选择“管理”,选择“任务计划程序”,“创建基本任务”,后面按提示把“run_sendmail.bat”设为自动启动就可以了



最后说一句,你可以批量设置,批量发送邮件,例如客户生日批量发送不同的祝福邮件,或者根据数据库里的逾期数据发送给客户逾期催收邮件,再或者给客户发送客户的账单消费信息,感兴趣的可以自己动手研究。



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
编程语言教你用python爬取唯品会商品信息,详细教程,仅供学习
最全总结!聊聊 Python 发送邮件的几种方式
使用Python自动生成报表以邮件发送
用 Python 写一个简单的Web框架
Python那些事——用 Python 写脚本发送工作周报
pytest参数化-读取excel allure报告展示
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服