使用Python3 poplib模块删除服务器多天前的邮件实现代码
作者:singleShape 发布时间:2023-05-08 08:21:54
标签:Python,poplib,模块,删除邮件
背景:
因为工作需要,公司给每个员工都分配了一个邮箱 公司的各种业务都通过邮箱发送。虽然给每个员工的电脑都设置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)
效果
来源:https://blog.csdn.net/qq_25094817/article/details/105700806


猜你喜欢
- 遇到个小白常见的问题,发现度娘里面没有记录,翻墙谷歌了下,解决问题,在此写个说明。事情起因:在jupyter notebook中导入文件时发
- 题目[1]:格式输出练习。在交互式状态下完成以下练习。运行结果截图:题目[2]:格式输出练习。在.py的文件中完成以下练习代码:num =
- 一.打包Flask项目1.1自己写个Flask1.2 下载pyinstallerpip install pyinstaller可选参数示例说
- 在本文中,小编将与大家重点探讨SQL执行进展优化的方法。聚集索引扫描SELECT * FROM C_SY_Ownedstorm 聚集索引扫描
- 本文实例讲述了python通过线程实现定时器timer的方法。分享给大家供大家参考。具体分析如下:这个python类实现了一个定时器效果,调
- 学习WEB标准的朋友一般都是从学习CSS开始,为什么呢?因为CSS是一种很有意思的语言,它能让我们的网页千变万化。也许我们一开始的接触只是因
- 有时候希望可以用js另开新窗口,但用window.open方法打开窗口总是被浏览器阻止,可以用下面的方法打开新窗口而不会遭到拦截1.新添加一
- 注:本文档做了两个MYSQL实例,多个实例方法以此类推LINUX操作系统:centOS6.3 64bit(安装了系统默认开发包)数据库一:M
- 你是否知道JavaScript其实也是一个函数式编程语言呢?本指南将教你如何利用JavaScript的函数式特性。要求:你应当已经对Java
- 本文研究的主要是Python编程通过pandas将数据分割成时间跨度相等的数据块的相关内容,具体如下。先上数据,有如下dataframe格式
- 一、表格与键概念主键:可唯一表示该资料(可以设置多个列表为主键)设置外键进行表与表的相连,且外键必须是其他表的主键(外键也可以设置自己表格的
- 1.offsetTop :当前对象到其上级层顶部的距离.不能对其进行赋值.设置对象到页面顶部
- 本文实例讲述了python常见数制转换用法。分享给大家供大家参考。具体分析如下:1.进位制度Python中二进制是以0b开头的:例如: 0b
- getatter()通过方法名字符串调用方法,这个方法最主要的作用就是实现反射机制,也就是说可以通过字符串获取方法实例,这样就可以把一个类可
- 1.安装step1step 2 首先是更改安装地址,推荐安装在D盘,如果和我一样C盘容量大的话,也可以不改,直接点击【Next】😄step3
- 运行结果(2020-2-4日数据)数据来源news.qq.com/zt2020/page/feiyan.htm抓包分析日报数据格式"
- 为什么需要优雅关闭什么叫优雅关闭?先说不优雅关闭,就是什么都不管,强制关闭进程,这会导致有些正在处理中的请求被强行中断这样做有什么问题?用户
- 一、前言索引设计不佳和缺少索引是提高数据库和应用程序性能的主要障碍。 设计高效的索引对于获得良好的数据库和应用程序性能极为重要。 本索引设计
- 最近刚好有朋友遇到个global相关的问题,这里简单学习一下global关键字的用法。想要更好的了解global关键字,首先要熟悉pytho
- 问题:如何在报表中每隔N行显示一条粗线如何为报表增加一个行号列?回答:1、在设计模式里打开该报表,在报表主体里面加一个TextBox,把Na