python发送带表格的邮件_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”设为自动启动就可以了

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

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

岑秋苑

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值