python实现定时压缩指定文件夹发送邮件

yizhihongxing

想要实现python定时压缩指定文件夹并发送邮件,需要以下步骤:

1. 安装依赖库

利用Python的第三方库可方便实现上述需求,安装所需库:

pip install schedule
pip install zipfile
pip install smtplib

2. 编写压缩函数

我们需要编写一个函数来实现将文件夹(包含其内部所有文件)进行压缩的功能:

from zipfile import ZipFile

def compress_folder(folder_path, zip_path):
    with ZipFile(zip_path, 'w') as zip:
        # 将文件夹下的所有文件递归加入Zip文件中
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                zip.write(os.path.join(root, file))

代码解析:

  • with ZipFile(zip_path, 'w') as zip::利用zipfile库创建一个新的Zip文件。
  • for root, dirs, files in os.walk(folder_path)::利用os库的walk函数遍历文件夹,其中,root为当前目录的路径,dirs为当前目录下的所有子目录(不含子目录下的子目录),files为当前目录下的所有文件。
  • zip.write(os.path.join(root, file)):将每个文件添加到Zip文件中。

3. 编写发送邮件函数

我们需要编写一个发送邮件的函数,以便定时将Zip文件通过邮件发送:

import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_email(sender_email, sender_password, receiver_email, subject, body, file_path):
    message = MIMEMultipart()
    message['From'] = sender_email
    message['To'] = receiver_email
    message['Subject'] = subject
    message.attach(MIMEText(body, 'plain'))
    with open(file_path, 'rb') as attachment:
        file = MIMEApplication(attachment.read(), _subtype='zip')
        file.add_header('Content-Disposition', 'attachment', filename=attachment.name)
        message.attach(file)
    smtp_server = smtplib.SMTP('smtp.gmail.com', 587)
    smtp_server.starttls()
    smtp_server.login(sender_email, sender_password)
    smtp_server.sendmail(sender_email, receiver_email, message.as_string())
    smtp_server.quit()

代码解析:

  • MIMEMultipart():创建一个多组件的邮件,可以添加附件及HTML内容。
  • message.attach(MIMEText(body, 'plain')):添加邮件正文。
  • with open(file_path, 'rb') as attachment::读取压缩后的Zip文件。
  • file = MIMEApplication(attachment.read(), _subtype='zip'):创建一个MIMEApplication对象,并将Zip文件内容作为MIMEApplication的附件。
  • file.add_header('Content-Disposition', 'attachment', filename=attachment.name):设置Zip文件的Content-Disposition属性。
  • smtp_server = smtplib.SMTP('smtp.gmail.com', 587):创建一个SMTP对象,设置SMTP服务器地址和端口号。
  • smtp_server.starttls():如果SMTP服务器支持TLS加密,则对SMTP服务器进行加密。
  • smtp_server.login(sender_email, sender_password):登录SMTP服务器。
  • smtp_server.sendmail(sender_email, receiver_email, message.as_string()):发送邮件。
  • smtp_server.quit():退出SMTP服务器。

4. 定时执行

我们可以使用schedule库来实现定时执行压缩和发送邮件的函数:

import os
import time
import schedule

def task():
    print('压缩与发送中...')
    folder_path = 'your_folder_path'
    zip_path = 'your_zip_path'
    sender_email = 'your_sender_email'
    sender_password = 'your_sender_password'
    receiver_email = 'your_receiver_email'
    subject = 'Your Subject'
    body = 'Your Body'
    compress_folder(folder_path, zip_path)
    send_email(sender_email, sender_password, receiver_email, subject, body, zip_path)
    print('压缩与发送结束')

schedule.every().day.at('20:00').do(task)

while True:
    schedule.run_pending()
    time.sleep(1)

代码解析:

  • schedule.every().day.at('20:00').do(task):表示每天20:00执行一次任务。
  • while True: schedule.run_pending() time.sleep(1):不断执行所有已注册的任务。

示例

下面是一个例子,假设我们已经有一个包含多个文件的文件夹 /home/ubuntu/files/,我们想要每天晚上8点将其压缩并发送至收件人邮箱 myfriend@example.com,则设置代码中的相应参数,运行程序即可:

folder_path = '/home/ubuntu/files/'
zip_path = '/home/ubuntu/files.zip'
sender_email = 'your_email@gmail.com'
sender_password = 'your_email_password'
receiver_email = 'myfriend@example.com'
subject = '文件夹压缩并发送'
body = '您好,这是压缩后的文件夹。'
schedule.every().day.at('20:00').do(task)
while True:
    schedule.run_pending()
    time.sleep(1)

还有一个例子,我们想要将 Python 项目的代码压缩并每小时都发送到指定邮箱,则设置代码中的相应参数,运行程序即可:

folder_path = '/home/ubuntu/python_project/'
zip_path = '/home/ubuntu/python_project.zip'
sender_email = 'your_email@gmail.com'
sender_password = 'your_email_password'
receiver_email = 'your_email@example.com'
subject = 'Python项目打包'
body = '您好,这是Python项目源码。'
schedule.every().hour.do(task)
while True:
    schedule.run_pending()
    time.sleep(1)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现定时压缩指定文件夹发送邮件 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python的concat等多种用法详解

    在Python中,concat是一个用于合并数据的函数,可以在多个轴上进行合并。本文将详细介绍concat函数的多种用法,并提供两个示例说明。 1. concat的基本用法 concat函数的基本用法如下: pd.concat(objs, axis=0, join=’outer’, ignore_index=False, keys=None, levels=…

    python 2023年5月14日
    00
  • Python简单生成随机姓名的方法示例

    下面就来详细讲解一下如何用Python生成随机姓名的方法。 生成姓氏 首先我们需要生成姓氏,通常我们可以使用已有的姓氏列表,很多基础库都可以提供这种列表。这里我们使用Python内置的random库来实现: import random # 姓氏列表 family_name_list = [‘赵’, ‘钱’, ‘孙’, ‘李’, ‘周’, ‘吴’, ‘郑’, …

    python 2023年5月20日
    00
  • Python学习之集合的常用方法总结

    以下是“Python学习之集合的常用方法总结”的完整攻略。 1. 集合的常用方法 在Python中,集合是一种无序、不重复的数据类型。集合中元素必须不可变的,例如数字、字符串、元组。下面介绍几个常用的集合方法。 1.1 add方法 add()方法用于向集合中添加元素。示例如下: my_set = {1, 2, 3} my_set.add(4) print(m…

    python 2023年5月13日
    00
  • 介绍Python中的一些高级编程技巧

    介绍Python中的一些高级编程技巧 Python是一种高级编程语言,具有简单易学、功能强大、可扩展性强等优点因此在各个领域都得到了广泛的应用。为了更好地利用Python的优势,我们需要掌握一些高级编程技巧。以下是介绍Python中的一些高级编程技巧的完整攻略。 1. 使用装饰器增强函数功能 装饰器是一种Python语法,可以在不修改函数源代码的情况下增强函…

    python 2023年5月13日
    00
  • mac系统安装Python3初体验

    下面是“mac系统安装Python3初体验”的完整攻略。 1. 下载并安装Homebrew Homebrew是macOS上最流行的包管理工具,可以方便快捷地安装软件包。在终端执行以下命令安装Homebrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homeb…

    python 2023年5月30日
    00
  • 详解Django的MVT设计模式

    详解Django的MVT设计模式 Django是一个基于Python的Web框架,采用了MVT(Model-View-Template)设计模式。MVT是一种基于MVC(Model-View-Controller)设计模式的变体,它将控制器(Controller)分解为模板(Template)和视图(View),以更好地实现业务逻辑和数据处理。以下是Djan…

    python 2023年5月14日
    00
  • python协程gevent案例 爬取斗鱼图片过程解析

    下面是关于“python协程gevent案例 爬取斗鱼图片过程解析”的完整攻略。 1. 什么是协程 协程是一种轻量级线程,Python的协程是基于生成器的协程。协程与线程的区别在于,线程是抢占式多任务,需要操作系统进行上下文切换,而协程是非抢占式多任务,通过协程程序员来控制何时上下文切换。 Python的协程一般使用yield关键字来实现,使用yield来挂…

    python 2023年6月3日
    00
  • Python中应用protobuf的示例详解

    Python中应用protobuf的示例详解 什么是protobuf Protobuf(Protocol Buffer)是一种轻便高效的数据存储格式,由Google开发并开源。它是一种类似于XML和JSON等常见数据存储格式的数据交换格式,但相比于这些格式,它更快更小,可以高度压缩协议大小,减少网络传输量。 安装protobuf 在Python中使用prot…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部