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()
注意事项:
- 密码安全:脚本中涉及邮箱账号密码,建议使用应用专用密码而不是普通密码,并避免在代码中直接明文保存密码。
- IMAP 访问:确保你的邮箱 IMAP 已启用,且使用的是授权的邮箱服务商支持的配置。
- 测试后再执行:在执行清理脚本前,建议先测试搜索逻辑,确认其只会选中三个月以前的邮件,以免误删除重要邮件。
是否有需要进一步优化的功能,例如按特定条件筛选邮件或选择性地移动而非删除邮件?