失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python发送带表格的邮件_PYTHON自动发送报表邮件

python发送带表格的邮件_PYTHON自动发送报表邮件

时间:2021-03-26 10:14:30

相关推荐

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 = #邮箱服务器

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

User = name@ #用户名

Password = pazzzz #密码

To=toname@ #收件人

Subject=title #邮件主题

使用PYTHON发邮件代码:# -*- coding:utf-8 -*-import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.application import MIMEApplicationHost =''Port = 25User ='name@'Password = 'pazzzz'To='toname@'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”设为自动启动就可以了

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

如果觉得《python发送带表格的邮件_PYTHON自动发送报表邮件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。