python exchangelib 删除邮件_Python优雅的操作Exchange邮箱——exchangelib模块使用介绍...

最近想把公司邮箱的附件给下载下来,附件好多都是我整理的报告和文档,一个个去下载明显太傻,碰到这种问题第一个想到的就是Python啦

需求很简单,只需要登录自己的Exchange邮箱,然后遍历所有邮件,有附件的就下载下来。

可是最主要的一步却难倒我了,连接Exchange邮箱比较麻烦,最后找到了exchangelib这个模块。

这个模块网上的教程不多,所以这里记录下使用过程。

安装exchangelib

exchangelib的github地址可以点击这里,可通过PyPi直接进行安装:

pip3 install exchangelib

具体编码

引入模块

exchangelib模块挺多的,其中Account, Credentials用来连接邮箱的,其他的根据你自身需求来吧,截图是所有模块:

截图1

连接邮箱

登录邮箱编码还是比较简单的:

credentials = Credentials('域名\用户名', '密码')

account = Account('邮箱', credentials=credentials, autodiscover=True)

如果你想容错,比如获取大量邮件时可能会超时之类的,像我的需求需要下载大量附件时,我们可以创建为服务账户:

credentials = ServiceAccount(username='域名\用户名', password='密码')

account = Account('邮箱', credentials=credentials, autodiscover=True)

发送邮件

虽然发送邮件和我的需求没什么关系,但稍微试验看一下,还是很方便的,几行代码就搞定了。

m = Message(

account=account,#之前申明的账户

subject='#标题',

body='#邮件内容',

to_recipients = [Mailbox(email_address='#收件人')]

)

m.send()

文件夹(Folders)

如果要查询你的邮件,就要使用到文件夹这个概念,比如收件箱account.inbox,发件箱account.outbox,我们以收件箱为例,获取收件箱的10条邮件并打印出来:

for item in account.inbox.all().order_by('-datetime_received')[:100]:

print(item.subject, item.sender, item.datetime_received)

如果你的收件箱下还有文件夹,可以使用children属性:

for item in account.inbox.children:

print('文件夹名称:'+item.name)

针对邮件,exchangelib还提供了查询筛选功能,比如官方的例子:

filtered_items = my_folder.filter(subject__contains='foo').exclude(categories__icontains='bar')

但是我试验了一些,还是比较慢的,可能我的邮件比较多吧。

附件

exchangelib对于附件也有很好的支持,官方例子如下:

for item in my_folder.all():

for attachment in item.attachments:

if isinstance(attachment, FileAttachment):

local_path = os.path.join('/tmp', attachment.name)

with open(local_path, 'wb') as f:

f.write(attachment.content)

print('Saved attachment to', local_path)

elif isinstance(attachment, ItemAttachment):

if isinstance(attachment.item, Message):

print(attachment.item.subject, attachment.item.body)

我的需求

最后贴下我的需求,下载我的邮箱中指定文件夹下所有的附件:

credentials = ServiceAccount(username='域名\用户名', password='密码')

account = Account('邮箱', credentials=credentials, autodiscover=True)

print('1.邮箱连接成功')

for item in account.inbox.children:

print('2.文件夹名称:'+item.name)

if item.name=='Reports':#只要Reports文件夹下的附件

index=0

totalcount=0

page=0

while True:

for model in item.all()[page:page+50]:

index=index+1

print(str(index)+'-开始:'+model.subject)

for attachment in model.attachments:

if isinstance(attachment, FileAttachment):

with open('/Users/cavin/Desktop/files/' + attachment.name, 'wb') as f:

f.write(attachment.content)

if totalcount==index:

break

page=page+50

totalcount=index

总结

利用python来提高你的工作效率还是不错的,你的想到的组件基本上都有,几行代码轻松搞定,棒棒哒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对超长的文字换行处理:程序和CSS样式

css .text-overflow { display: block; /*内联对象需加*/ width: 125px; word-break: normal; white-space: pre-wrap; /* 不换行 */ overflow: hidden; /* 内容超出宽度时隐藏超出部分的内容 */ text-overflow: ellipsis; height: 30px; position: absolute; } <!--对超长…

DARPA盘点2017年最受关注的十大科技新闻

来源&#xff1a;国防科技要闻2017年&#xff0c;DARPA国防颠覆性技术与能力方面的重大投资覆盖了从量子超材料、机器学习、神经技术到无人系统自主性的数十个领域约250个项目。DARPA官网全年共收获3500万次访问量。根据访问量排序&#xff0c;DARPA整理出最受关注的十大技术新…

函数的凹凸性证明_理解图灵机和递归函数的等价性证明

背景之前读了 Martin Davis 的《Computability and Unsolvability》&#xff0c;决定对其中的图灵机和递归函数等价性证明做一个&#xff08;不严谨的&#xff09;整理&#xff0c;证明方法比较有趣&#xff0c;虽然最终结果并没有太大的惊喜。整理本身的目标是抛开晦涩难懂的数…

观点 | 别忽视深度学习的种种问题,Gary Marcus 泼冷水义不容辞

来源&#xff1a;AI科技评论纽约大学心理学教授 Gary Marcus 曾是 Uber 人工智能实验室的负责人&#xff0c;他自己创立的人工智能创业公司 Geometric Intelligence 2016 年 12 月被 Uber 收购&#xff0c;自己也就加入 Uber 帮助他们建立人工智能实验室。Gary Marcus 也曾号召…

spring框架做全局异常捕获_@ControllerAdvice注解(全局异常捕获)

背景ControllerAdvice 注解 通常用于定义ExceptionHandler&#xff0c; InitBinder和ModelAttribute 适用于所有RequestMapping方法的方法。ExceptionHandler异常处理器作用:可以拦截程序抛出来的指定异常。使用场景:主要使用与项目统一异常处理&#xff0c;对于rest风格的返回…

DeepMind推出「控制套件」:为「强化学习智能体」提供性能基准

来源&#xff1a;arxiv作者&#xff1a;Yuval Tassa, Yotam Doron, Alistair Muldal, Tom Erez,Yazhe Li, Diego de Las Casas, David Budden, Abbas Abdolmaleki, Josh Merel,Andrew Lefrancq, Timothy Lillicrap, Martin Riedmiller「雷克世界」编译&#xff1a;嗯~阿童木呀、…

JS中实现replaceAll的方法

http://fuleonardo.iteye.com/blog/339749 第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志)。 replace() The replace()…

pytorch统计矩阵非0的个数_矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法...

在介绍矩阵的压缩存储前&#xff0c;我们需要明确一个概念&#xff1a;对于特殊矩阵&#xff0c;比如对称矩阵&#xff0c;稀疏矩阵&#xff0c;上&#xff08;下&#xff09;三角矩阵&#xff0c;在数据结构中相同的数据元素只存储一个。 [TOC] 三元组顺序表 稀疏矩阵由于其自…

【视频】2017,50个令人屏息的科技瞬间

来源&#xff1a;甲子光年概要&#xff1a;整个世界的巨变&#xff0c;肇始于一颗微尘的颤动。「甲子光年」挑选了属于2017年的50个科技瞬间。十年后再回望时&#xff0c;它们可能正是那个撼动世界的历史性时刻。即将过去的2017年&#xff0c;一定有这样的一瞬&#xff1a;整个…

机加工程序工时程序_准终工时、人工工时、机器工时,十个工程师九个会弄错...

​上一篇文章种蚂蚁先生跟大家详细分析了产品成本的组成&#xff0c;其主要分为材料成本和制造成本两个部分。 然而要得到制造成本&#xff0c;则必须有标准工时数据。那么标准工时究竟是什么呢&#xff1f;​标准工时制&#xff1a; 标准工时是在标准工作环境下&#xff0c;进…

互联网大脑的云反射弧路径选择问题,兼谈ET大脑模糊认知反演理论

互联网大脑的云反射弧路径选择问题研究2008年以来&#xff0c;我们在互联网大脑架构和互联网进化的研究中提到&#xff0c;“互联网大脑架构&#xff0c;就是互联网向与人类大脑高度相似的方向进化过程中&#xff0c;形成的类脑巨系统架构。互联网云脑架构具备不断成熟的类脑视…

如何传入比较器_typescript专题(五) 装饰器

欢迎来到我专题文章【typescript】&#xff0c;更多干货内容持续分享中&#xff0c;敬请关注&#xff01;本章目标基于webpack4.x从0开始搭建ts的开发环境ts中的装饰器的基本使用基于webpack4.x从0开始搭建ts的开发环境webpack4.x已经问世好久了&#xff0c;0配置是一大亮点&am…

『报告』IDC:2018年物联网产业10大预测

来源&#xff1a;T客汇编译概要&#xff1a;根据市场研究公司IDC的报告&#xff0c;2018年全球物联网支出总额将达到7720亿美元。新年新气象&#xff0c;2017年被称作物联网&#xff08;IoT&#xff09;元年&#xff0c;而2018年还将续写IoT的高歌猛进。根据市场研究公司IDC的报…

上传图片和音频到DB

jsp页面 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%> <% include file"/pages/exercise/editExerciseFrame.jsp"%> <…

hbase获取表信息_HBase的读写和javaAPI的使用

一、hbase系统管理表hbase:namespace&#xff0c;记录了hbase中所有namespace的信息 ,当前系统下有哪些namespace信息scan hbase:namespacehbase:meta&#xff0c;记录了region信息scan hbase:meta二、读写思想client(get、scan)rowkey条件(1)由于rowkey是存储在region上的(2)判…

机器学习必知的15大框架

作者 | Devendra Desale译者 | Mags来源 | 云栖社区不管你是一个研究人员&#xff0c;还是开发者&#xff0c;亦或是管理者&#xff0c;想要使用机器学习&#xff0c;需要使用正确的工具来实现。本文介绍了当前最流行15个机器学习框架。机器学习工程师是开发产品和构建算法团队…

上传图片和音频到Server,再转存到DB

jsp页面 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%> <link rel"stylesheet" href"<c:url value/plugin/ztree-v3…

区分大小屏幕_第一个Python程序——在屏幕上输出文本

本节我将给大家介绍最简单、最常用的 Python 程序——在屏幕上输出一段文本&#xff0c;包括字符串和数字。Python 使用 print 函数在屏幕上输出一段文本&#xff0c;输出结束后会自动换行。在屏幕上输出字符串字符串就是多个字符的集合&#xff0c;由双引号" "或者单…

2018 年物联网发展五大趋势预测

来源&#xff1a;腾股创投作者 &#xff1a;Pramod Chandrayan物联网已经开始在所有行业的企业中走向主流。 到 2018 年底&#xff0c;物联网支出预计将增长 15&#xff05;&#xff0c;达到 7725 亿美元&#xff0c;毫无疑问&#xff0c;未来一年连接设备和企业物联网项目数量…

js中立即执行函数会预编译吗_JavaScript预编译过程

什么是预编译&#xff1f;当js代码执行时有三个步骤&#xff1a;1.语法分析&#xff0c;这个过程检查出基本的语法错误。2&#xff0c;预编译&#xff0c;为对象分配空间。3&#xff0c;解释执行&#xff0c;解释一行执行一行&#xff0c;一旦出错立即停止执行。预编译发生在代…