Python自动化办公实战:Word、Excel和Email案例等

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

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

  不过别慌,中也曾经发布过好几篇了,这里继续用上了,一开始我也觉得挺难的,后来发现也没有想的那么复杂,代码如下:

  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"""  

        

            

                 

您好:{name}
  

                             

  

                  

      """  

      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 docx  

  from 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 '' in para.text:  

              for run in para.runs:  

                  if '' in run.text: 

                      runrun.text = run.text.replace('', 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"""  

        

            

                 

您好:{name}
  

                 

          

        

      """  

      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自动邮件发送任务。程序运行之后,邀请函会自动生成,然后邮件会自动发送,速度也非常快,给几百个、上千个客户发送邀请函就不害怕了,如果有上万个客户,可能需要借助第三方平台辅助了,毕竟一般的普通邮箱,每日发送邮箱数是有限制的。

★网站部分内容来源网络,如不经意侵犯了您的权益请发送邮件联系我们在36小时内删除★。
本文链接:http://www.quxuepython.com/article/1.html

最后编辑于:2021-12-31作者:admin

上一篇: