今天小编给大家分享一下Python群发邮件案例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

背景

想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名、联系方式、邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做?

正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换,之后将Word转Pdf格式,然后复制Excel表格中的邮箱进行发送编辑好的邮件正常,之后附上邀请函附件,点击发送,大概算一下,激情高昂的状态下,这个流程快的话,大概需要1分钟甚至更多。如果客户只有几十个就还好,一个小时就可以搞定,如果客户有几百个,上千个,甚至上万个呢?那估计要哭晕在办公室了。

不过别慌,Python自动化办公,一套组合拳,使用Python自动化办公——Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送一条龙服务安排,下面一起来看看吧!

实现过程

1)替换Word模板生成对应邀请函

这里以上面的Word模板做案例,编写一个函数以客户姓名进行替换模板中的,一步到位。

defget_invitation(name):doc=docx.Document("template.docx")forparaindoc.paragraphs:if'<name>'inpara.text:forruninpara.runs:if'<name>'inrun.text:runrun.text=run.text.replace('<name>',name)doc.save(f'./邀请函/{name}.docx')

上面这个代码需要理解Word文档的结构,一个文档有多个段落,用doc.paragraphs获取;段落中的文字用para.text获取;一个段落中可能有多个不同样式的文本,这些不同的样式被称为run,一个段落中包含多个run,用para.runs获取,一个run中的具体文本用run.text获取。了解了这些,再看上述代码,是不是清晰很多呢?

2)将Word邀请函转化为Pdf格式

这个就简单很多了,Python自动化办公中,一行代码就可以实现,而且速度还十分快。

fromdocx2pdfimportconvertconvert(f"./邀请函/{name}.docx")

使用convert()函数可以把docx格式的文件转换成同名的Pdf文档。

3)读取Excel表格中的姓名和邮箱

这里需要用到openpyxl库了,当然关于Excel的库还是很多的,这里以这个库作为示例,代码如下:

defget_username_email():workbook=openpyxl.load_workbook("names.xlsx")worksheet=workbook.activeforindex,rowinenumerate(worksheet.rows):ifindex>0:name=row[0].value#获取表格第一列的姓名email=row[3].value#获取表格第四列的邮箱#print(name,email)#print(f"{name}邀请函正在生成...")#get_invitation(name)send_email(name,email)

上面的代码,理解起来应该并不难,读取Excel中的姓名和邮箱,之后传到get_invitation()生成邀请函,之后传给send_email()函数中自动发送邮件。实际上,这两部是分开进行的,这里是先执行get_invitation()函数,先生成邀请函,之后再将该函数注释掉,再执行发送邮件函数,

4)自动发送邮件

关于自动发送邮件,历史文章中也曾经发布过好几篇了,这里继续用上了,一开始我也觉得挺难的,后来发现也没有想的那么复杂,代码如下:

smtp=smtplib.SMTP(host="smtp.qq.com",port=587)#smtp.login(邮箱,授权码)smtp.login('235977@qq.com',"ruybefkipoo")defsend_email(name,email):msg=MIMEMultipart()msg["subject"]=f"您好,{name},您的邀请函!"msg["from"]="2352180977@qq.com"msg["to"]=emailhtml_content=f"""<html><body><p>您好:{name}<br><b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b><br>点击这里了解更多:<ahref="https://www.pdcfighting.com"rel="externalnofollow"rel="externalnofollow">演唱会主页</a></p></body></html>"""html_part=MIMEText(html_content,"html")msg.attach(html_part)withopen(f"./邀请函/{name}.pdf","rb")asf:doc_part=MIMEApplication(f.read())doc_part.add_header("Content-Disposition","attachment",filename=name)#把附件添加到邮件中msg.attach(doc_part)#发送前面准备好的邮件smtp.send_message(msg)#如果放到外边登录,这里就不用退出服务器连接,所以注释掉了#smtp.quit()

这里需要注意三点,其一是邮箱登录放在了函数外边,防止函数多次调用,短时间多次请求登录邮箱被封禁;其二邮箱登录里边用的是授权码,而不是你的邮箱登录密码,这里使用的是qq邮箱做示例,其他邮箱需要更改smtp服务;其三这个代码里边除了正文中引用了html写法,还携带了Pdf格式的邀请函附件,稍显复杂。

5)完整代码

以上四个步骤进行拆分了,依次完成了Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送任务,这里附上完整的代码。

importdocxfromdocx2pdfimportconvertimportopenpyxlimportsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipartfromemail.mime.applicationimportMIMEApplication#生成对应的邀请函,并转存pdf格式defget_invitation(name):doc=docx.Document("template.docx")forparaindoc.paragraphs:if'<name>'inpara.text:forruninpara.runs:if'<name>'inrun.text:runrun.text=run.text.replace('<name>',name)doc.save(f'./邀请函/{name}.docx')convert(f"./邀请函/{name}.docx")smtp=smtplib.SMTP(host="smtp.qq.com",port=587)smtp.login('235977@qq.com',"ruybefkipoo")defsend_email(name,email):msg=MIMEMultipart()msg["subject"]=f"您好,{name},您的邀请函!"msg["from"]="2352180977@qq.com"msg["to"]=emailhtml_content=f"""<html><body><p>您好:{name}<b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b>点击这里了解更多:<ahref="https://www.pdcfighting.com"rel="externalnofollow"rel="externalnofollow">演唱会主页</a></p></body></html>"""html_part=MIMEText(html_content,"html")msg.attach(html_part)withopen(f"./邀请函/{name}.pdf","rb")asf:doc_part=MIMEApplication(f.read())doc_part.add_header("Content-Disposition","attachment",filename=name)#把附件添加到邮件中msg.attach(doc_part)#发送前面准备好的邮件smtp.send_message(msg)#如果放到外边登录,这里就不用退出服务器连接,所以注释掉了#smtp.quit()defget_username_email():workbook=openpyxl.load_workbook("names.xlsx")worksheet=workbook.activeforindex,rowinenumerate(worksheet.rows):ifindex>0:name=row[0].valueemail=row[3].value#print(name,email)#print(f"{name}邀请函正在生成...")#get_invitation(name)send_email(name,email)if__name__=='__main__':get_username_email()#get_invitation('Python进阶者')

以上就是“Python群发邮件案例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。