转载本文请联系蔡J学习Python公众号。前言大家好,我是J哥。高考不久,想必很多朋友都盼望着能考出好成绩,能够考上理想的大学。一旦成绩出来,大学招生办公室的老师们将面临着巨大的工作压力,需要给学生发送录取通知书。本文将通过Python技术,教大家如何使用Python批量读取考生成绩,合并邮件,自动发送邮件。快学吧~要求如下:02准备工作首先我们把图片中的三个文件放在同一个文件夹下,mailmerge.ipynb是新建的Python文件,123mailmergedatasource.xls是成绩Excel表,和邮件合并模板。docx是录取通知书模板。我们打开录取通知书模板,它是这样的:如果你用过Word邮件合并功能批量生成文件,那么这个模板就很熟悉了。03实战演练文件都准备好了,接下来打开Python文件开始写代码。1、导入模块导入前需要安装两个主要的库,一个是操作word模板的doctxpl,一个是操作邮件的zmail。所以先pip它们,很快~#installmodulepipinstalldocxtplpipinstallzmail然后导入需要用到的模块:#import模板库fromdocxtplimportDocxTemplateimportpandasaspd#import邮件库importzmailimporttime2,邮件合并使用pandas的read_excel方法读取候选成绩表,遍历候选人信息一条一条,并将关键信息渲染成Word模板,最后以候选人姓名为文件名保存。#读取数据源df=pd.read_excel('123邮件合并数据源.xls')print(df)#word邮件合并批量生成录取通知书foriinrange(len(df)):#以a的形式存储字典和模板中需要更新的关键信息contxt=dict(df.iloc[i])#获取名称作为文件名filename=contxt['name']#获取邮箱地址youxiang=contxt['mailbox']#打开模板文件tpl=DocxTemplate('Mailmergetemplate.docx')#Render(更新)模板文件生成新文件tpl.render(contxt)#保存文件tpl.save(filename+'.docx')运行结果:3.发送邮件接下来,我们需要将新生成的录取通知书通过QQ邮箱一一发送出去。在发信之前,需要对QQ邮箱进行简单的配置。第一步:打开QQ邮箱,点击设置-账户,拉取SMTP服务。我开启了SMTP服务,但是系统提示J哥的QQ没有申请二代密码保护,打不开,于是申请了密码保护。申请密码保护主要是将手机号绑定到QQ上。如果在申请的过程中忘记了一些信息,请好友协助验证即可~好友协助验证完成后,按要求发送短信:终于拿到授权码了(Python发送QQ邮箱必填参数):第二步:添加发送邮件的Python代码段。发送邮件的代码比较简单。下面的代码段也给出了详细的注释。当然,最有效的学习方式还是参考官方文档。每个参数都经过深入研究。#Setemailsubjectsubject='AdmissionNotice'#Setemailcontentcontent='你已被我校录取,请妥善保管通知并按时报到!'#设置邮件附件附件=文件名+'.docx'#设置邮件信息mail={'subject':subject,'content_text':content,'attachments':attachment}#设置发送邮箱server=zmail.server('你的@qq.com','你的授权码')#发送邮件server.send_mail(youxiang,mail)time.sleep(2)print('th'+str(i+1)+'邮件发送成功')邮件发送后,打开其中一封邮件,如下:04完整代码#导入模板库fromdocxtplimportDocxTemplateimportpandasaspd#导入邮件库importzmailimporttime#读取数据源df=pd.read_excel('123邮件合并数据源.xls')print(df)#生成文件并作为附件发送到邮箱foriinrange(len(df)):#将需要更新的关键信息以字典的形式存储在模板中contxt=dict(df.iloc[i])#获取名称作为文件名filename=contxt['name']#获取邮箱地址youxiang=contxt['mailbox']#打开模板文件tpl=DocxTemplate('mailmergetemplate.docx')#render(更新)模板文件to生成新文件tpl.render(contxt)#保存文件tpl.save(filename+'.docx')#设置邮件主题subject='录取通知书'#设置邮件内容content='你已经被我们学校录取了,请妥善保管通知,按时上报!'#设置邮件附件附件=文件名+'.docx'#设置邮件信息mail={'subject':subject,'content_text':content,'attachments':attachment}#设置发送邮箱server=zmail.server('你@qq.com','你的授权码')#sendmailserver.send_mail(youxiang,mail)time.sleep(2)print('th'+str(i+1)+'邮件发送成功')print('所有邮件都发送成功')
