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

本文介绍如何使用Python实现批量读取考生成绩,并利用Word模板生成个性化录取通知书,最终通过QQ邮箱自动发送给每位考生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fc32eb9582bc6a706ec96ac8c26d3c85.png

01

前言

本文将利用Python技术,手把手教你用Python批量读取考生成绩,邮件合并且自动发送邮件,赶紧学起来吧~

需求如下:

aa5728ed227d279fbbad8ede8fc56e47.png

02

准备工作

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

1e29ad88358c26a4f44fd286b18db65a.png

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

119e8aa7871396b672f65c578bfd6753.png

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

03

实战演练

文件都准备完毕,接下来打开Python文件,开始编写代码。

1、导入模块

导入之前需要安装两个主要库,一个是操作word模板的doctxpl,一个是操作邮件的zmail。因此先pip它们,很快~

#安装模块
pip install docxtpl
pip install zmail

接着导入需要用到的模块:

#导入模板库
from docxtpl import DocxTemplate
import pandas as pd
#导入邮件库
import zmail
import time

2、邮件合并

运用pandas的read_excel方法读取考生成绩表,逐个遍历考生信息,并将关键信息渲染至Word模板中,最后以考生姓名作为文件名保存。

#读取数据源
df=pd.read_excel('123邮件合并数据源.xls')
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')

运行结果:

ce8061b052439af3d4a49ccee5ca8df1.png

3、发送邮件

接下来,我们需要将新生成的录取通知书逐个通过QQ邮箱发送,发件之前呢,需要对QQ邮箱进行简单配置。

第1步:打开QQ邮箱,点击设置-账户,一直拉到SMTP服务。

78d53d4a8a4a0802945ee923de9fa47a.png

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

2bfd23fcf18c8383a04377fb84b8cbda.png

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

7616be2aebf31c06c00991f11d2c2042.png

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

09080441bb782cb7706a07f1d8e4cf1b.png

第2步:加入发送邮件的Python代码段

发送邮件的代码相对简单,以下代码段也给出了详细的注释,当然,最有效的学习方式还是参考官方文档,可以对各个参数进行深入研究。

#设置邮件主题
    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)+'封邮件己发送成功')

邮件发送后,打开其中一封邮件,如下:

bff928f2502b55f39543e206ee5078c3.png

04

完整代码

#导入模板库
from docxtpl import DocxTemplate
import pandas as pd
#导入邮件库
import zmail
import time
#读取数据源
df=pd.read_excel('123邮件合并数据源.xls')
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('邮件己全部发送成功')

20636777fc8d0e733a99a64216b035bc.gif95dbcb41d32135cb783068450b30b5f9.gifeb93947ff7f2f173b9fa8693356f6191.gif

ccd7408b73c1ee36d4eb68eb7bfebccd.png

cfea6388df84544025fe35ba29207a56.png

点击下方阅读原文加入社区会员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值