python编写一个自动清理三个月以前的邮件脚本

以下是一个使用 Python 编写的自动清理三个月以前的邮件的脚本。这个脚本适用于连接支持 IMAP 协议的邮箱服务,例如 Gmail。请注意,在执行此操作时,您需要提供电子邮件账号和应用程序专用密码(建议不要使用普通密码,并且小心保护密码)。

此脚本会登录到邮箱并自动删除三个月以前的邮件。你需要开启邮箱的 IMAP 访问,并确保 IMAP 权限已授予你的账号。

import imaplib
import email
from email.header import decode_header
import datetime

# 邮箱登录信息
EMAIL = "your_email@gmail.com"
PASSWORD = "your_app_password"
IMAP_SERVER = "imap.gmail.com"

# 连接到 IMAP 服务器
def connect_to_mailbox(email, password, imap_server):
    try:
        mail = imaplib.IMAP4_SSL(imap_server)
        mail.login(email, password)
        return mail
    except Exception as e:
        print(f"登录失败: {e}")
        return None

# 获取三个月前的日期
def get_three_months_ago_date():
    three_months_ago = datetime.datetime.now() - datetime.timedelta(days=90)
    return three_months_ago.strftime("%d-%b-%Y")

# 清理三个月以前的邮件
def clean_old_emails(mail):
    mail.select("inbox")
    date_cutoff = get_three_months_ago_date()
    search_query = f'(BEFORE {date_cutoff})'
    result, data = mail.search(None, search_query)

    if result == "OK":
        email_ids = data[0].split()
        if not email_ids:
            print("没有找到三个月以前的邮件。")
            return
        
        print(f"找到 {len(email_ids)} 封邮件,将进行删除。")
        for e_id in email_ids:
            mail.store(e_id, '+FLAGS', '\\Deleted')
        mail.expunge()
        print("清理完成。")
    else:
        print("邮件搜索失败。")

# 主函数
def main():
    mail = connect_to_mailbox(EMAIL, PASSWORD, IMAP_SERVER)
    if mail:
        clean_old_emails(mail)
        mail.logout()

if __name__ == "__main__":
    main()

注意事项:

  1. 密码安全:脚本中涉及邮箱账号密码,建议使用应用专用密码而不是普通密码,并避免在代码中直接明文保存密码。
  2. IMAP 访问:确保你的邮箱 IMAP 已启用,且使用的是授权的邮箱服务商支持的配置。
  3. 测试后再执行:在执行清理脚本前,建议先测试搜索逻辑,确认其只会选中三个月以前的邮件,以免误删除重要邮件。

是否有需要进一步优化的功能,例如按特定条件筛选邮件或选择性地移动而非删除邮件?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/918244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

使用 Prompt API 与您的对象聊天

tl;dr:GET、PUT、PROMPT。现在,可以使用新的 PromptObject API 仅使用自然语言对存储在 MinIO 上的对象进行总结、交谈和提问。在本文中,我们将探讨这个新 API 的一些用例以及代码示例。 赋予动机: 对象存储和 S3 API 的无处不在…

Oracle OCP认证考试考点详解082系列19

题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 91. 第91题: 题目 解析及答案: 关于 Oracle 数据库中的索引及其管理,以下哪三个陈述是正确的&#x…

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆,或许最大受益者仍是 AI,因为只有硬件才能为 AI 直接获取最真实世界的数据。 在人工智能与硬件融合的新时代,实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实,从空间视频到脑机接口&…

Element UI如何实现按需导入--Vue3篇

前言 在使用 Element UI 时,按需导入(即按需引入)是一个常见的需求,尤其是在构建大型应用时。按需导入可以显著减少打包后的文件体积,提升应用的加载速度。本文将详细介绍如何在项目中实现 Element UI 的按需导入&…

【设计模式】行为型模式(五):解释器模式、访问者模式、依赖注入

《设计模式之行为型模式》系列,共包含以下文章: 行为型模式(一):模板方法模式、观察者模式行为型模式(二):策略模式、命令模式行为型模式(三):责…

.NET 9.0 中 System.Text.Json 的全面使用指南

以下是一些 System.Text.Json 在 .NET 9.0 中的使用方式,包括序列化、反序列化、配置选项等,并附上输出结果。 基本序列化和反序列化 using System; using System.Text.Json; public class Program {public class Person{public string Name { get; se…

《InsCode AI IDE:编程新时代的引领者》

《InsCode AI IDE:编程新时代的引领者》 一、InsCode AI IDE 的诞生与亮相二、独特功能与优势(一)智能编程体验(二)多语言支持与功能迭代 三、实际应用与案例(一)游戏开发案例(二&am…

优选算法 - 5 ( 栈 队列 + 宽搜 优先级队列 9000 字详解 )

一:栈 1.1 删除字符串中的所有相邻重复项 题目链接:删除字符串中的所有相邻重复项 class Solution {public String removeDuplicates(String _s) {// 用 StringBuffer 模拟一下栈结构StringBuffer ret new StringBuffer();// 接着把 _s 转换为字符数组…

【linux012】文件操作命令篇 - more 命令

文章目录 more 命令1、基本用法2、常见选项3、交互式键盘命令4、举例5、注意事项 more 命令 more 是 Linux 中的一个分页查看命令,用于逐屏显示文件内容。它特别适合用于查看较长的文件,与 cat 不同,more 不会一次性输出所有内容&#xff0c…

企业BI工具如何选择?主流5款BI工具多维对比

数据大爆炸时代,企业数据爆发式增长,来自产品、运营、价值链以及外部的数据都成指数级增长趋势。利用大数据分析实现精细化运营,驱动业务增长是企业的理想蓝图。而BI工具能够整合、分析并可视化复杂的数据集,帮助管理层和决策者快…

Qt 5.6.3 手动配置 mingw 环境

- 安装 qt 5.6.3 mingw 版 - 打开 qt creator - 找到选项 工具 - 选项- 构建和运行 - 找到 “编译器” 选项卡 ,点击 "添加" “编译器路径” 设置为 qt 安装目录下, tool 文件夹内的 g.exe 设置完成后,点击 "apply" ,使选项生…

linux使用scp和密钥在不同服务器传输文件

将源服务密钥中公钥(以pub结尾的)复制或拷贝密文,粘贴到目标服务器中的/root/.ssh/authorized_keys文件中; 测试连接:ssh -p2129 root172.129.162.537,如果使用默认端口22 -p参数可省略,注意这…

德克萨斯扑克(德扑)笔记

文章目录 比牌方法(大小)发牌下注位置一些牌面的简称QT是什么意思89s是什么意思AT是什么意思ATs是什么意思 89o是什么意思 其他术语Action 叫注/说话 - 一个玩家的决定Betting Rounds 押注圈其他术语 团建或和小伙伴聚会的时候经常玩德扑,一是凑手,二是聚…

[ 网络安全介绍 5 ] 为什么要学习网络安全?

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

C++: string(二)

✨✨ 欢迎大家来到我的文章✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 分类专栏:c 我的主页:tyler s blog 文章目录 一 string的成员函数1 insert2 resize3assign4erase5replace6 find(1) find(2)rfind…

鸿蒙应用权限控制与位置服务(Location Kit)

11_11日学习笔记 文章目录 [toc] 一、应用权限管控授权方式分类:1、[system_grant(系统授权)](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/permissions-for-all-V5#system_grant系统授权权限列表)2、[user_grant&…

Ubuntu 18 EDK2 环境编译

视频:在全新的Ubuntu上从零搭建UEFI的EDK2开发环境 开始:git clone https://github.com/tianocore/edk2.git 开始编译BaseTools前先更新一下子模块:git submodule update --init ,然后:make -C BaseTools/ 问题1&a…

网络安全SQL初步注入2

六.报错注入 mysql函数 updatexml(1,xpath语法,0) xpath语法常用concat拼接 例如: concat(07e,(查询语句),07e) select table_name from information_schema.tables limit 0,1 七.宽字节注入(如果后台数据库的编码为GBK) url编码:为了防止提交的数据和url中的一些有特殊意…

Git 搭建远程仓库、在 IDEA 工具中的配置和使用

Git的概念、安装、操作与分支管理和图形化界面TortoiseGit(小乌龟 )的安装与使用-CSDN博客 目录 一、远程仓库 1)在github上创建仓库 2)在gitee上创建项目 3)如何将远程的项目clone 到本地 4)公司自己…