python群发邮件,python邮件自动发送
我们经常会遇到需要给办公室的很多客户发邮件的情况。这个时候怎么才能快速完成这个任务?不要慌,本文会给你提供一个用Python代码解决这个问题的方法。如果需要,请参考。
00-1010后台实施流程总结
目录
想象一下,现在你有一个Word邀请模板,然后你有一个客户列表,里面有客户的姓名、联系方式、电子邮件地址等基本信息。那么你的老板现在需要把邀请模板里的名字替换掉,然后把Word邀请模板生成Pdf格式,然后编辑好统一的邀请辞(邮件正文),然后把邀请附件依次发到客户的邮箱里。你会怎么做?
一般情况下,我们必须将客户的名字复制粘贴到Excel表格中,然后替换每一个Word文档,再将Word转换成Pdf格式,再将电子邮件地址复制到Excel表格中,发送编辑好的邮件。之后附上邀请函附件,点击发送。粗略计算一下。如果这个过程很快,大约需要1分钟或更长时间。如果只有几十个客户,一个小时就能搞定。如果有几百个,几千个,甚至上万个客户呢?我想我会在办公室里哭出来。
不过不用慌,Python自动化办公,一套组合拳,使用Python自动化办公——Word文档替换,Excel表格读取,Pdf文件生成和Email自动邮件发送一条龙服务安排。让我们来看看吧!
背景
1)替换Word模板,生成相应的邀请函
这里以上面的Word模板为例,写一个函数将模板中的替换为客户姓名,一步即可实现。
def get_invitation(名称):
doc=docx。文档( template.docx )
文件第3360段中的段落
如果第:段中的“名称”
用于在第:段中运行
如果run.text:中的“名称”
run run . text=run . text . replace( name ,name)
Doc.save(f 。/invitation /{name}。docx’)
上面的代码需要了解一个Word文档的结构。一个文档有多个段落,这些段落是用doc.paragraphs获取的;段落中的文本由para.text获得;一个段落中可能有许多不同的文本样式。这些不同的风格被称为运行。一个段落包含多个游程,由para.runs获取,一个游程中的具体文本由run.text获取了解了这一点,再看上面的代码,是不是清晰很多?
2)将Word邀请函转换成Pdf格式
这就简单多了。在Python自动化办公中,一行代码就可以实现,速度非常快。
从docx2pdf导入转换
转换(f 。/invitation /{name}。docx’)
convert()函数可用于将docx格式文件转换为同名的Pdf文档。
3)读取Excel表格中的姓名和电子邮件地址
这里需要Openpyxl库。当然,还有很多关于Excel的库。这里,以这个库为例。代码如下:
def get_username_email():
workbook=open pyxl . load _ workbook( names . xlsx )
worksheet=workbook.active
对于索引,枚举中的行(worksheet.rows):
如果索引为0:
Name=row[0]。value #获取表格第一列的名称。
Email=row[3]。value #获取表中第四列的邮箱。
#打印(姓名、电子邮件)
# print(f{name}正在生成邀请.)
# get_invitation(姓名)
发送电子邮件(姓名,电子邮件)
上面的代码,懂吗
起来应该并不难,读取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")
def send_email(name, email):
msg = MIMEMultipart()
msg["subject"] = f"您好,{name},您的邀请函!"
msg["from"] = "2352180977@qq.com"
msg["to"] = email
html_content = f"""
<html>
<body>
<p>您好:{name}<br>
<b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b><br>
点击这里了解更多:<a href="https://www.pdcfighting.com" rel="external nofollow" rel="external nofollow" >演唱会主页</a>
</p>
</body>
</html>
"""
html_part = MIMEText(html_content, "html")
msg.attach(html_part)
with open(f"./邀请函/{name}.pdf", "rb") as f:
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自动邮件发送任务,这里附上完整的代码。
import docxfrom docx2pdf import convert
import openpyxl
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# 生成对应的邀请函,并转存pdf格式
def get_invitation(name):
doc = docx.Document("template.docx")
for para in doc.paragraphs:
if <name> in para.text:
for run in para.runs:
if <name> in run.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")
def send_email(name, email):
msg = MIMEMultipart()
msg["subject"] = f"您好,{name},您的邀请函!"
msg["from"] = "2352180977@qq.com"
msg["to"] = email
html_content = f"""
<html>
<body>
<p>您好:{name}
<b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b>
点击这里了解更多:<a href="https://www.pdcfighting.com" rel="external nofollow" rel="external nofollow" >演唱会主页</a>
</p>
</body>
</html>
"""
html_part = MIMEText(html_content, "html")
msg.attach(html_part)
with open(f"./邀请函/{name}.pdf", "rb") as f:
doc_part = MIMEApplication(f.read())
doc_part.add_header("Content-Disposition", "attachment", filename=name)
# 把附件添加到邮件中
msg.attach(doc_part)
# 发送前面准备好的邮件
smtp.send_message(msg)
# 如果放到外边登录,这里就不用退出服务器连接,所以注释掉了
# smtp.quit()
def get_username_email():
workbook = openpyxl.load_workbook("names.xlsx")
worksheet = workbook.active
for index, row in enumerate(worksheet.rows):
if index > 0:
name = row[0].value
email = 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自动化办公,主要介绍了使用Python相关库,依次完成Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送任务。程序运行之后,邀请函会自动生成,然后邮件会自动发送,速度也非常快,给几百个、上千个客户发送邀请函就不害怕了,如果有上万个客户,可能需要借助第三方平台辅助了,毕竟一般的普通邮箱,每日发送邮箱数是有限制的。
到此这篇关于Python自动化办公之群发邮件案例详解的文章就介绍到这了,更多相关Python群发邮件内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。