知行编程网知行编程网  2022-02-06 08:00 知行编程网 隐藏边栏 |   抢沙发  26 
文章评分 0 次,平均分 0.0
 

01

前言

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

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

 

 

02

准备工作

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

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

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

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

如果你使用过Word邮件合并功能批量生成文件,那这种模板就再熟悉不过了。

03

实战演练

文件都准备完毕,接下来打开Python文件,开始编写代码。
 
1、导入模块
 
导入之前需要安装两个主要库,一个是操作word模板的doctxpl,一个是操作邮件的zmail。因此先pip它们,很快~
 

pip install docxtpl
pip install zmail
接着导入需要用到的模块:
 time
2、邮件合并
 
运用pandas的read_excel方法读取考生成绩表,逐个遍历考生信息,并将关键信息渲染至Word模板中,最后以考生姓名作为文件名保存。
 
)
print(df)

#Word邮件合并批量生成录取通知书
for i in range(len(df)):
#以字典形式存储模板中需要更新的关键信息
contxt=dict(df.iloc[i])
#获取姓名,作为文件名
filename=contxt['姓名']
#获取邮箱地址
youxiang=contxt['邮箱']
#打开模板文件
tpl = DocxTemplate('邮件合并模板.docx')
#渲染(更新)模板文件生成新文件
tpl.render(contxt)
#保存文件
tpl.save(filename+'.docx')

运行结果:
 

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

 
 
3、发送邮件
接下来,我们需要将新生成的录取通知书逐个通过QQ邮箱发送,发件之前呢,需要对QQ邮箱进行简单配置。
 
第1步:打开QQ邮箱,点击设置-账户,一直拉到SMTP服务
我用Python批量读取考生成绩单,并自动发送录取通知书邮件
开启SMTP服务,结果系统提示J哥的QQ没有申请第二代密码保护,无法开启,于是申请密保。申请密保主要是把手机号绑定你的QQ,如果申请过程中忘记一些信息,邀请你的好友辅助验证即可~

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

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

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

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

 

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

第2步加入发送邮件的Python代码段
发送邮件的代码相对简单,以下代码段也给出了详细的注释,当然,最有效的学习方式还是参考官方文档,可以对各个参数进行深入研究。
)
邮件发送后,打开其中一封邮件,如下:

我用Python批量读取考生成绩单,并自动发送录取通知书邮件

 

04

完整代码

 
)
print(df)

#生成文件并以附件形式发送到邮箱
for i in range(len(df)):
#以字典形式存储模板中需要更新的关键信息
contxt=dict(df.iloc[i])
#获取姓名,作为文件名
filename=contxt['姓名']
#获取邮箱地址
youxiang=contxt['邮箱']
#打开模板文件
tpl = DocxTemplate('邮件合并模板.docx')
#渲染(更新)模板文件生成新文件
tpl.render(contxt)
#保存文件
tpl.save(filename+'.docx')
#设置邮件主题
subject='录取通知书'
#设置邮件内容
content='你己被我校录取,请妥善保管通知书,并按时报到!'
#设置邮件附件
attachment=filename+'.docx'
#设置邮件信息
mail={'subject':subject,'content_text':content,'attachments':attachment}
#设置发件邮箱
server = zmail.server('你的@qq.com','你的授权码')
#发送邮件
server.send_mail(youxiang,mail)
time.sleep(2)
print('第'+str(i+1)+'封邮件己发送成功')

print('邮件己全部发送成功')

 

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享