
01
前言
大家好,我是J哥。
高考刚结束不久,很多小伙伴肯定都期待有个好成绩,能够进入理想的大学。而一旦成绩出来,大学招生办老师将面临给广大学子发送录取通知书的巨大工作压力,本文将利用Python技术,手把手教你用Python批量读取考生成绩,邮件合并且自动发送邮件,赶紧学起来吧~
需求如下:

02
准备工作
首先,我们将图中三个文件置于同一文件夹中,邮件合并.ipynb为新建的Python文件,123邮件合并数据源.xls为成绩Excel表,邮件合并模板.docx为录取通知书模板。

我们打开录取通知书模板,长这样:

如果你使用过Word邮件合并功能批量生成文件,那这种模板就再熟悉不过了。
03
实战演练
文件都准备完毕,接下来打开Python文件,开始编写代码。
1、导入模块
导入之前需要安装两个主要库,一个是操作word模板的doctxpl,一个是操作邮件的zmail。因此先pip它们,很快~
1#安装模块 2pip install docxtpl 3pip install zmail 4
接着导入需要用到的模块:
1#导入模板库 2from docxtpl import DocxTemplate 3import pandas as pd`` 4#导入邮件库 5import zmail 6import time 7
2、邮件合并
运用pandas的read_excel方法读取考生成绩表,逐个遍历考生信息,并将关键信息渲染至Word模板中,最后以考生姓名作为文件名保存。
1#读取数据源 2df=pd.read_excel('123邮件合并数据源.xls') 3print(df) 4 5#Word邮件合并批量生成录取通知书 6for i in range(len(df)): 7 #以字典形式存储模板中需要更新的关键信息 8 contxt=dict(df.iloc[i]) 9 #获取姓名,作为文件名 10 filename=contxt['姓名'] 11 #获取邮箱地址 12 youxiang=contxt['邮箱'] 13 #打开模板文件 14 tpl = DocxTemplate('邮件合并模板.docx') 15 #渲染(更新)模板文件生成新文件 16 tpl.render(contxt) 17 #保存文件 18 tpl.save(filename+'.docx') 19
运行结果:

3、发送邮件
接下来,我们需要将新生成的录取通知书逐个通过QQ邮箱发送,发件之前呢,需要对QQ邮箱进行简单配置。
第1步:打开QQ邮箱,点击设置-账户,一直拉到SMTP服务。

开启SMTP服务,结果系统提示J哥的QQ没有申请第二代密码保护,无法开启,于是申请密保。申请密保主要是把手机号绑定你的QQ,如果申请过程中忘记一些信息,邀请你的好友辅助验证即可~

好友辅助验证完成后,按要求发送短信:

终于拿到授权码(Python发送QQ邮件必备参数):

第2步:加入发送邮件的Python代码段
发送邮件的代码相对简单,以下代码段也给出了详细的注释,当然,最有效的学习方式还是参考官方文档,可以对各个参数进行深入研究。
1 #设置邮件主题 2 subject='录取通知书' 3 #设置邮件内容 4 content='你己被我校录取,请妥善保管通知书,并按时报到!' 5 #设置邮件附件 6 attachment=filename+'.docx' 7 #设置邮件信息 8 mail={'subject':subject,'content_text':content,'attachments':attachment} 9 #设置发件邮箱 10 server = zmail.server('你的@qq.com','你的授权码') 11 #发送邮件 12 server.send_mail(youxiang,mail) 13 time.sleep(2) 14 print('第'+str(i+1)+'封邮件己发送成功')
邮件发送后,打开其中一封邮件,如下:

04
完整代码
1#导入模板库 2from docxtpl import DocxTemplate 3import pandas as pd 4#导入邮件库 5import zmail 6import time 7#读取数据源 8df=pd.read_excel('123邮件合并数据源.xls') 9print(df) 10 11#生成文件并以附件形式发送到邮箱 12for i in range(len(df)): 13 #以字典形式存储模板中需要更新的关键信息 14 contxt=dict(df.iloc[i]) 15 #获取姓名,作为文件名 16 filename=contxt['姓名'] 17 #获取邮箱地址 18 youxiang=contxt['邮箱'] 19 #打开模板文件 20 tpl = DocxTemplate('邮件合并模板.docx') 21 #渲染(更新)模板文件生成新文件 22 tpl.render(contxt) 23 #保存文件 24 tpl.save(filename+'.docx') 25 #设置邮件主题 26 subject='录取通知书' 27 #设置邮件内容 28 content='你己被我校录取,请妥善保管通知书,并按时报到!' 29 #设置邮件附件 30 attachment=filename+'.docx' 31 #设置邮件信息 32 mail={'subject':subject,'content_text':content,'attachments':attachment} 33 #设置发件邮箱 34 server = zmail.server('你的@qq.com','你的授权码') 35 #发送邮件 36 server.send_mail(youxiang,mail) 37 time.sleep(2) 38 print('第'+str(i+1)+'封邮件己发送成功') 39 40print('邮件己全部发送成功') 41
-------------------********************************** End **********-------------**-----********-**********************************
往期精彩文章推荐:

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。
本文转自 https://mp.weixin.qq.com/s/-yV1ElOwi10iHD9xQcydgw,如有侵权,请联系删除。
