Python批量下载电子邮件附件并汇总合并Excel文件_第12天 | 12天搞定Python,办公自动化(完结必读)

有朋友问我,能说说用Python操作excel和word究竟有什么用么?别的不敢说,这个我还真知道,毕竟我曾用xlwings(操作excel)帮人力资源部的小妹合并过几十个excel文件,省去她手工处理的大半天时间,她一开心说要给我介绍个女朋友。我还曾用xlwings和python-docx帮助市场部,批量向经销商发送邀请函等。应用范围挺多的,我就不一一列举了。

不知Python如何操作excel的,请先看《第12天 | 12天搞定Python,让excel飞起来 》,不知Python如何操作word的,请先看《第12天 | 12天搞定Python,word和pdf 》。接下来,咱们就来实现批量发送邀请函的功能。

12.4 批量发送邀请函

读取excel客户列表中的的名字和电子邮件地址,将客户名字写入word邀请函;将邀请函作为电子邮件附件,按指定电子邮件地址进行发送。

1. 读取客户清单

数据我随意造的,注意改成你自己能接收电子邮件的地址,客户名字,你爱叫什么就叫什么。客户信息.xlsx文件内容示例如下。

470918bc62d350308d6984a09e5e24db.png

实现功能代码

import xlwings as xwapp = xw.App(visible=True, add_book=False)app.display_alerts = Trueapp.screen_updating = True# 打开文件wb = app.books.open("客户信息.xlsx")sht = wb.sheets["sheet1"]rows = sht.used_range.last_cell.row# 从第2行开始,第1行为标题i = 2while i <= rows:    # 读取一行    rowRange = "B%d:D%d" % (i, i)    rowData = sht.range(rowRange).value    # word会用到    name = str(rowData[0]) + ("先生" if rowData[2] == "男" else "女士")    # 电子邮件地址    email = rowData[1]    print(name, email)    i += 1wb.save()wb.close()app.quit()

输出结果

4800771a112fe064bc45e9aae7bbe6d3.png

2. word模板

自己造一个模板文件,命名为invitation.docx。程序将里面的标签{{name}}、{{year}}等替换为指定的人和日期。在保存时,记得存为另外的名称,否则invitation.docx就不可以复用了(因为标签被替换掉了,就没有标签存在了)。

fd6043d3e18f3fdf02993c1cba423230.png

实现功能的代码

from docxtpl import DocxTemplatefrom datetime import datetime# 模板文件tpl = DocxTemplate("invitation.docx")# 需要替换内容以key:value的方式进行更换dt = datetime.now()context = {    "name": "刘德华先生",    "year": dt.year, "month": dt.month, "day": dt.day}tpl.render(context)tpl.save("邀请函.docx")

输出结果

25f720fb59407cf80a40b7ea7852d1d7.png

3. 发送邮件

发送邮件,用Python内置的smtplib接口便可,注意发送word附件时,相关参数的设置。我实现的功能是通过二进制流的方式进行的。代码在实际项目中拷贝出来的,我们一直在使用。我发布文章时,又进行了多次测试,结果都没发现任何问题的,你大可放心使用。

import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Header# 设置登录及服务器信息mail_host = "smtp.126.com"mail_user = "xxx@126.com"mail_pass = "xxx***"sender = "xxx@126.com"receivers = ["xxxx2@qq.com"]# 设置邮件信息,处理正文及附件message = MIMEMultipart()message["From"] = sendermessage["To"] = receivers[0]message["Subject"] = Header("您好,邀请您参加吹牛逼大会", "utf-8").encode()# 邮件正文内容content = """刘德华先生,您好:我是吹牛逼公司公司的老陈。我想邀请您于2020-10-32,参加公司一年一度的吹牛逼大会望您能在百忙当中,抽空出席。邀请函已附在附件,麻烦您看后给与答复。谢谢!祝:万事如意,工作顺利.邀请人:老陈说编程邀请日期:2020-10-20"""message.attach(MIMEText(content, "plain", "utf-8"))# 设置参数with open("邀请函.docx", "rb")as h:    content2 = h.read()part = MIMEText(content2, "base64", "utf-8")# 附件设置内容类型,方便起见,设置为二进制流part["Content-Type"] = "application/octet-stream"# 设置附件头,添加文件名part.add_header("Content-Disposition", "attachment", filename="邀请函.docx")message.attach(part)# 登录并发送try:    smtpObj = smtplib.SMTP()    smtpObj.connect(mail_host, 25)    smtpObj.login(mail_user, mail_pass)    smtpObj.sendmail(        sender, receivers, message.as_string())    print("邮件发送成功")    smtpObj.quit()except smtplib.SMTPException as e:    print("邮件发送失败", e)

输出结果

邮件发送成功
19ece2b9eed2684f1b204ce502ca01a7.png

好了,自己将从excel读取的客户信息写入word模板并进行邮件发送吧。如果我写得这么好,你都不转发的话,你会不会有点....?

好了,有关Python实现办公自动化的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我将分享Python,前端(小程序)和App方面的编程知识。关注我,没错的。

#Python##Python编程从入门到实践##程序员##办公自动化##邮件#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值