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