使用Python3 poplib模块删除服务器多天前的邮件实现代码

2020-09-27 0 648

背景:

因为工作需要,公司给每个员工都分配了一个邮箱 公司的各种业务都通过邮箱发送。虽然给每个员工的电脑都设置pop3登录但是他们的程序设定有保存服务器副本,所以大量邮件使得服务器存储占用巨大。

删除服务器上多天前的邮件

实现:

  • 使用 Python poplib 进行删除查看操作
  • 使用email.parser 进行内容解析
  • 使用 dateutil.parser 做邮件日期转换

代码

# -*- coding: UTF-8 -*-
import poplib
import datetime
import dateutil.parser
from email.parser import Parser
from parser import ParserError

def deleteMail(days = 30):
 mailServer = poplib.POP3(\'mail.sunyieh.com\', 110)
 mailServer.user(\'mis.cq@sunyieh.com\')
 mailServer.pass_(\'password\')
 mStat = mailServer.stat()
 print(mStat )#连接状态
 mailTotal = mStat[0]#邮件总数
 print(\"邮箱总邮件数量:{},占用{}b\".format(mStat[0],mStat[1]))
 print(mailServer.getwelcome())

 # 使用list()返回所有邮件的编号,默认为字节类型的串
 resp, mails, octets = mailServer.list()
 print(\"响应信息: \", resp)
 print(\"list方法返回数据大小(字节): {}b\".format( octets))
 for i in range(mailTotal):
  resp, mailContent, octets = mailServer.retr(i+1)
  # 可以获得整个邮件的原始文本:
  msg_content = Parser().parsestr(b\'\\r\\n\'.join(mailContent).decode(\"iso8859\",\"\"))
  dateStr = msg_content.get(\"Date\",\"\")
  print(\"日期字符串:\",dateStr)
  try:
   maildate =dateutil.parser.parse(dateStr)
   # 判断多少天前的邮件
   if maildate.date() < datetime.datetime.now().date() - datetime.timedelta(days=days):
    print(\"正在删除邮件 第{}封,邮件日期:{} {}\".format(i+1,maildate.date(),maildate.time()))
    mailServer.dele(i + 1)
   else:
    # 删除完成
    print(\"完成删除,本次共计删除{}封邮件!\".format(i))
    break
  except ParserError:
   print(\"正在删除邮件 第{}封,邮件日期:没有\".format(i + 1))
   mailServer.dele(i + 1)
 print(\"正在保存本次操作!\")
 mailServer.quit()
 print(\"ok!\")
if __name__ == \"__main__\":
 deleteMail(30)

效果

使用Python3 poplib模块删除服务器多天前的邮件实现代码

到此这篇关于使用Python3 poplib模块删除服务器多天前的邮件的实现代码的文章就介绍到这了,更多相关Python3 poplib模块删除邮件内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

遇见资源网 Python 使用Python3 poplib模块删除服务器多天前的邮件实现代码 http://www.ox520.com/25379.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务