社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Python中文社区 • 3 年前 • 577 次点击  


01

前言


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

需求如下:



02

准备工作


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


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


如果你使用过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')

运行结果:



3、发送邮件

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

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


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


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


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



第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)+'封邮件己发送成功')

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



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('邮件己全部发送成功')


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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/120395
 
577 次点击