Python自动化办公之群发邮件案例详解

目录
  • 背景
  • 实现过程
  • 总结

背景

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

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

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

实现过程

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

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

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')

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

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

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

from docx2pdf import convert
convert(f"./邀请函/{name}.docx") 

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

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

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

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) 

上面的代码,理解起来应该并不难,读取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 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 '<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群发邮件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python给指定csv表格中的联系人群发邮件(带附件的邮件)

    以下为使用python给指定路径的csv表格中的联系人群发带附件的邮件(csv表格的第一列为联系人姓名,第二列为联系人邮箱账号)的代码,详情见注释. import time import csv #用于读取收件人列表 import smtplib #用于发送邮件 from email.header import Header #Header用于构造邮件头 from email.mime.text import MIMEText #MIMEText用于构造文本邮件 from email.mime.

  • python实现自动发送邮件发送多人、群发、多附件的示例

    1.最近公司实现部分数据统计.分析的报表进行每天定时发送到相关人员的邮箱之中的配置代码被人为删除了,需要重新恢复该功能,由于原先是在linux上使用shell配置发送,实在是太繁琐,所以准备使用python来实现该功能,不过发现网上各种文档都是未经过整理,代码写的很不友善,比如发送多人的只能发送前一个邮箱,附件写死不灵活等等,故特写一遍比较记录. 主要会遇到的几个问题: 1.smtplib.SMTPAuthenticationError: (550, b'User has no permissi

  • Python群发邮件实例代码

    直接上代码了 复制代码 代码如下: import smtplibmsg = MIMEMultipart() #构造附件1att1 = MIMEText(open('/home/a2bgeek/develop/python/hello.py', 'rb').read(), 'base64', 'gb2312')att1["Content-Type"] = 'application/octet-stream'att1["Content-Disposition"] = '

  • python3+mysql查询数据并通过邮件群发excel附件

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 连接.查询mysql,导入到excel文件,定时群发邮件与附件. 主要用到pymysql ,smtplib , xlwt #1. 导入模块 import pymysql #Python3的mysql模块,Python2 是mysqldb import os import datetime #定时发送,以及日期 import shutil #文件操作 import smtplib #邮件模块 from email

  • 用Python实现群发邮件

    目录 群发邮件 登录邮箱 设置邮件信息及正文文本 设置附件 发送邮件并关闭邮箱服务 项目总结 完整代码: 我们需要将[小组销量排名表.xlsx]通过邮件发送给[组长邮箱.xlsx]中的各个组长. 这里会学一个新的知识点——str.join(),通过它实现群发邮件的功能. 群发邮件 from openpyxl import load_workbook import smtplib from email.mime.text import MIMEText from email.mime.multip

  • python实现QQ邮箱群发邮件实例

    目录 一,登录邮箱,获取授权码 二,替换参数 总结 一,登录邮箱,获取授权码 二,替换参数 给多人发送邮箱,我只是做了个循环,把每个人得授权码循环输入了.把授权码和邮箱替换成自己得就行,内容你可以自己定义 import smtplib from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from emai

  • Python自动化办公之群发邮件案例详解

    目录 背景 实现过程 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换,之后将Word转Pdf格式,然后复制Excel表格中的邮箱进行发送编辑好的邮件正常,之后附上邀请函附件,

  • python爬虫破解字体加密案例详解

    本次案例以爬取起小点小说为例 案例目的: 通过爬取起小点小说月票榜的名称和月票数,介绍如何破解字体加密的反爬,将加密的数据转化成明文数据. 程序功能: 输入要爬取的页数,得到每一页对应的小说名称和月票数. 案例分析: 找到目标的url: (右键检查)找到小说名称所在的位置: 通过名称所在的节点位置,找到小说名称的xpath语法: (右键检查)找到月票数所在的位置: 由上图发现,检查月票数据的文本,得到一串加密数据. 我们通过xpathhelper进行调试发现,无法找到加密数据的语法.因此,需要通

  • python爬虫系列网络请求案例详解

    学习了之前的基础和爬虫基础之后,我们要开始学习网络请求了. 先来看看urllib urllib的介绍 urllib是Python自带的标准库中用于网络请求的库,无需安装,直接引用即可. 主要用来做爬虫开发,API数据获取和测试中使用. urllib库的四大模块: urllib.request: 用于打开和读取url urllib.error : 包含提出的例外,urllib.request urllib.parse:用于解析url urllib.robotparser:用于解析robots.tx

  • python读取mnist数据集方法案例详解

    mnist手写数字数据集在机器学习中非常常见,这里记录一下用python从本地读取mnist数据集的方法. 数据集格式介绍 这部分内容网络上很常见,这里还是简明介绍一下.网络上下载的mnist数据集包含4个文件: 前两个分别是测试集的image和label,包含10000个样本.后两个是训练集的,包含60000个样本..gz表示这个一个压缩包,如果进行解压的话,会得到.ubyte格式的二进制文件. 上图是训练集的label和image数据的存储格式.两个文件最开始都有magic number和n

  • Python threading Local()函数用法案例详解

    目录 前言 local() 函数是什么? local()函数如何用? 1. 不做标记,不做隔离 2.使用local()函数加以控制 3. 模拟实现local()的功能,创建一个箱子 4. 简化代码操作,进一步模拟实现local()函数 总结 前言 当多线程访问同一个公共资源时,如果涉及到修改该公共资源的操作就可能会出现由于数据不同步导致的线程安全问题.一般情况下我们可以通过给公共资源加互斥锁的方式来处理该问题. 当然,除非必须将多线程使用的资源设置为公共资源的情况.如果一个资源不需要在多个线程之

  • Python字典中items()函数案例详解

    Python3:字典中的items()函数 一.Python2.x中items():   和之前一样,本渣渣先贴出来python中help的帮助信息: >>> help(dict.items) Help on method_descriptor: items(...) D.items() -> list of D's (key, value) pairs, as 2-tuples >>> help(dict.iteritems) Help on method_de

  • Python实现图片压缩的案例详解

    目录 1.引言 2.PIL模块 2.1 quality 方式 2.2 thumbnail方式 3.OpenCV模块 3.1 安装 3.2 执行代码 4.总结 1.引言 小屌丝:鱼哥,求助,求助 小鱼:啥情况,这火急火燎的? 小屌丝: 我要在某站进行认证,上传图片时提示,图片超过本站最大xxx限制. 小鱼:就这?? 小屌丝:对啊,我又不想换照片,又不像照片失真. 小鱼:就这要求? 小屌丝:对,能赶紧帮我不处理不? 小鱼:嗯~ 理论上是可以. 小屌丝:什么都别说,我懂,枸杞一袋! 小鱼:懂我,五分钟

  • chatGPT之Python API启用上下文管理案例详解

    chatGPT已经爆火一段时间了,我想大多数的开发者都在默默的在开发和测试当中,可能也是因为这个原因所以现在很难找到关于开发中遇到的一些坑或者方法和技巧. 为什么别人的机器人能联想之前的语料,而你的却像个每次都只如初见的高冷机器人? 我也是参考官方文档去阅读和理解的,但是有时候官方文档以为你很懂了,就没有太多说明,废话不多说下面我跟大家讲一下API调用时如何启用上下文管理的. 官方案例: # Note: you need to be using OpenAI Python v0.27.0 for

  • python自动化工具之pywinauto实例详解

    本文实例为大家分享了python自动化工具pywinauto,供大家参考,具体内容如下 一.win环境应用自动化 1.浏览器中下载 2.在cmd下启动:python get-pip.py 3.在cmd中输入python -m pip --version查看安装pip的版本. 4.模块安装:pip3 install pywinauto 5.程序中加载模块: import time from pywinautoimport application 二,实例 #encoding=utf-8 #auth

  • Python自动化测试之异常处理机制实例详解

    目录 一.前言 二.异常处理合集 2.1 异常处理讲解 2.2 异常捕获 2.3 异常捕获原理 2.4 特定异常捕获 2.5 异常捕获的处理 2.6 except.Exception与BaseException 2.7 finally用法 2.8 异常信息的打印输出 三.总结 一.前言 今天笔者还是想要讲python中的基础,主要讲解Python中异常介绍.捕获.处理相关知识点内容,只有学好了这些才能为后续自动化测试框架搭建及日常维护做铺垫,废话不多说我们直接进入主题吧. 二.异常处理合集 2.

随机推荐