目录
  • 背景
  • 实现过程
    • 1)替换word模板生成对应邀请函
    • 2)将word邀请函转化为pdf格式
    • 4)自动发送邮件
    • 5)完整代码
  • 总结

    背景

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

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

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

    实现过程

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

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

    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}<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()  
    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自动化办公实战案例详解(word、excel、pdf、email邮件)的文章就介绍到这了,更多相关python自动化办公内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!