清理邮箱空间

博主个人博客
博主个人资源网站
博主个人资源网站备用

在大多数情况下,企业邮箱的储存空间相对较小,这就使得我们常常需要清理无用的邮件以释放空间。然而,企业邮箱自带的删除功能往往不尽人意,存在诸多不足之处。为了解决这一问题,特编写了以下代码。该程序具有强大的功能,能够根据发件人、收件人以及主题这三个条件对邮件进行精准删除,从而高效地清理邮箱空间,满足我们的实际需求。

代码实现:

一次只能清理单个发件人、收件人或及主题!

import tkinter as tk
from tkinter import ttk
from imbox import Imbox


def delete_emails(server, username, password, filter_condition):
    try:
        imbox = Imbox(server, username=username, password=password, ssl=True, starttls=False)
        support_tickets = imbox.messages()

        for uid, message in support_tickets:
            sent_from = message.sent_from
            sent_to = message.sent_to
            subject = message.subject
            from_value = sent_from[0]['email']
            to_value = sent_to[0]['email']

            from_email = filter_condition.get('from_email', None)
            if from_email is not None and from_value == from_email:
                log_message(f"发件人 {from_value} 匹配 from_email 筛选条件. UID: {uid.decode()}")
                imbox.delete(uid.decode())

            to_email = filter_condition.get('to_email', None)
            if to_email is not None and to_value == to_email:
                log_message(f"收件人 {to_value} 匹配 to_email 筛选条件. UID: {uid.decode()}")
                imbox.delete(uid.decode())

            subject_value = filter_condition.get('subject', None)
            if subject_value is not None and subject_value in subject:
                log_message(f"主题为 '{subject}' 的邮件匹配主题筛选条件. UID: {uid.decode()}")
                imbox.delete(uid.decode())

    except Exception as e:
        log_message("登录失败: 用户名或密码错误。")
    finally:
        try:
            imbox.logout()
        except:
            pass  # 如果没有成功连接,可能不需要登出


def log_message(message):
    log_text.config(state=tk.NORMAL)
    log_text.insert(tk.END, message + "\n")
    log_text.config(state=tk.DISABLED)
    with open("email_log.txt", "a", encoding='utf-8') as log_file:
        log_file.write(message + "\n")


def submit_data():
    server = server_entry.get()
    username = username_entry.get()
    password = password_entry.get()
    filter_key_display = filter_combobox.get()
    filter_key = next((key for key, value in filter_options.items() if value == filter_key_display), None)
    filter_value = filter_value_entry.get()
    key_value_pair = {filter_key: filter_value} if filter_key else {}

    log_message("开始处理邮件删除...")
    delete_emails(server, username, password, key_value_pair)


# 创建主窗口
root = tk.Tk()
root.title("邮件清理")

# 服务器地址
tk.Label(root, text="服务器地址:").grid(row=0, column=0, padx=10, pady=10)
server_entry = tk.Entry(root, width=40)
server_entry.grid(row=0, column=1, padx=10, pady=10)

# 邮箱地址
tk.Label(root, text="邮箱地址:").grid(row=1, column=0, padx=10, pady=10)
username_entry = tk.Entry(root, width=40)
username_entry.grid(row=1, column=1, padx=10, pady=10)

# 密码
tk.Label(root, text="密码:").grid(row=2, column=0, padx=10, pady=10)
password_entry = tk.Entry(root, show="*", width=40)
password_entry.grid(row=2, column=1, padx=10, pady=10)

# 筛选条件下拉框
tk.Label(root, text="筛选条件:").grid(row=3, column=0, padx=10, pady=10)
filter_options = {
    "from_email": "发件人",
    "to_email": "收件人",
    "subject": "主题"
}
filter_combobox = ttk.Combobox(root, values=list(filter_options.values()), width=38)
filter_combobox.grid(row=3, column=1, padx=10, pady=10)

# 设置默认值为发件人
filter_combobox.current(0)

# 输入框
tk.Label(root, text="输入值:").grid(row=4, column=0, padx=10, pady=10)
filter_value_entry = tk.Entry(root, width=40)
filter_value_entry.grid(row=4, column=1, padx=10, pady=10)

# 提交按钮
submit_button = tk.Button(root, text="提交", command=submit_data)
submit_button.grid(row=5, columnspan=2, pady=20)

# 日志框
log_label = tk.Label(root, text="日志:")
log_label.grid(row=6, column=0, columnspan=2, pady=(10, 0))  # 标签居中显示
log_text = tk.Text(root, height=10, width=40)
log_text.grid(row=7, column=0, columnspan=2, padx=10, pady=(10, 30))  # 增加底部边距

# 运行主循环
root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智核推荐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值