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

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

[[405127]]

本文转载自微信公众号「菜J学Python」,作者 J哥、燕子。转载本文请联系菜J学Python公众号。

 前言

大家好,我是J哥。

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

需求如下:

02准备工作

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

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

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

03实战演练

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

1、导入模块

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

  1. #安装模块 
  2. pip install docxtpl 
  3. pip install zmail 

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

  1. #导入模板库 
  2. from docxtpl import DocxTemplate 
  3. import pandas as pd 
  4.  
  5. #导入邮件库 
  6. import zmail 
  7. import time 

2、邮件合并

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

  1. #读取数据源 
  2. df=pd.read_excel('123邮件合并数据源.xls'
  3. print(df) 
  4.  
  5. #Word邮件合并批量生成录取通知书 
  6. for 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'

运行结果:

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. #导入模板库 
  2. from docxtpl import DocxTemplate 
  3. import pandas as pd 
  4. #导入邮件库 
  5. import zmail 
  6. import time 
  7. #读取数据源 
  8. df=pd.read_excel('123邮件合并数据源.xls'
  9. print(df) 
  10.  
  11. #生成文件并以附件形式发送到邮箱 
  12. for 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.  
  40. print('邮件己全部发送成功'

 

责任编辑:武晓燕 来源: 菜J学Python
相关推荐

2018-09-05 15:31:25

编程语言PythonExcel

2018-07-23 14:12:31

物流

2015-06-15 10:11:38

小米内容陈彤

2023-12-06 11:10:08

2022-06-07 14:42:23

5G运营商数据

2013-08-13 09:32:53

微软Windows 8销量

2021-03-16 14:45:06

比特币加密货币货币

2020-03-30 12:07:29

数字化

2021-12-14 07:40:08

Excel自动化办公

2015-05-14 19:23:47

思科钱伯斯

2017-04-26 09:00:23

Python发送邮件脚本

2010-01-06 10:21:23

2021-02-01 11:03:36

Python开发邮件

2021-06-29 11:40:51

Python邮件命令

2022-03-21 10:09:08

PythonExcel邮件

2011-10-31 09:35:50

2012-02-02 09:34:32

苹果三星诺基亚

2021-08-19 10:22:03

Python股票编程语言
点赞
收藏

51CTO技术栈公众号