Python是一种解释型、交互式、面向对象的编程语言,不但简单、开源、可移植,而且拥有丰富的Python官方和第三方类库。这些类库的底层代码不一定都是Python,还有很多C/C++的身影。通过C/C++语言实现的代码可以在Python中被调用。所以Python也被称为“胶水语言”。基于Python的强大类库,我们可以实现诸如Web开发,自动化管理,数据分析,机器学习等各种功能。今天我要介绍的是如何借助Python的Exchangelib库轻松实现Exchange邮箱的自动化管理。重点介绍邮箱中的邮件数据和会议日程\日历的在Python中的自动化管理操作。
     

    Exchange是微软的企业级邮件服务系统,本地Exchange版本目前最新的是Exchange2019。随着云服务的不断发展,用户群体也越来越庞大。很多用户转而使用Exchange Online服务或者将本地Exchange与Exchange Online进行混合部署。本文的实现代码和案例对本地的Exchange和Exchange Online邮箱都是适用的。

    Exchangelib是一个强大的Exchange客户端Python库。它实现了Exchange邮箱的对象关系映射。 Exchangelib库对邮箱的管理操作是通过EWS (Exchange Web Service) 来实现的。EWS是Exchange邮箱的接口服务。EWS集成了原来WebDAV和CODEX的功能,基于SOAP协议。这使它可以被发送HTTPS请求的任何操作系统远程访问。EWS是非常高效的Exchange资源访问接口。

    在开始之前,我们首先在CMD中运行命令pip来安装Exchangelib库(pip是Python的包管理工具):pip install exchangelib。

接下来导入exchangelib和datetime等类库:

from exchangelib import Message,Credentials,Account,HTMLBody,Mailbox
from exchangelib import EWSTimeZone,EWSDateTime
import datetime as dt

1.1邮件发送的实现如下:

#将邮箱的帐号和密码等信息赋值给account
credentials = Credentials("","")
account = Account(',credentials=credentials,autodiscover=True)
#html中包含的是HTML格式的邮件内容
html = 'Hello World!'
#在message中配置帐号 邮件标题 内容 收件人等信息
message = Message(
account=account,
subject="For Test",
body=HTMLBody(html),
to_recipients=('',),
)
#发送邮件
message.send()

1.2邮件获取的实现如下:

#获取本地时区
tz = EWSTimeZone.localzone()
#获取某一时间段内的邮件内容;比如获取日期为3/27/2021的所有邮件。首先指定时区,然后创建时区相关的时间日期类实例。如果邮件位于收件箱Inbox的子文件夹中,可以如下所示将替换为子文件夹的名字 items = (account.inbox/'').all().filter(datetime_received__range=(
dt.datetime(2021, 3, 27, 0, 0, 0, 0, tz),
dt.datetime(2021, 3, 27, 23, 59, 59, 0, tz)
))
如果想取前100封邮件,可以使用如下命令:
items = (account.inbox/'Reports').all().order_by('-datetime_received')[0:100]

1.3邮件转发的实现如下:

items[0].forward(subject='FWD:%s'%items[0].subject, body=Items[0].body, to_recipients=('',))

1.4邮件删除的实现如下:

items[0].delete()#完全删除
items[0].soft_delete()#软删除 可恢复
to_folder = account.root/'Top of Information Store'/'Deleted Items'
items[0].move(to_folder)#移动到已删除文件夹

    通过以上的学习,我们知道了通过Python操作Exchange邮箱的基本方法。下面举一个简单的自动化管理邮箱的例子:比如实现对特定种类的邮件进行自动回复。

#获取最近一天的未读邮件
today = dt.datetime.today()
day = dt.timedelta(days=1)
from_date = today - day
tz = EWSTimeZone.localzone()
tz_time = from_date.replace(tzinfo=tz)
items = account.inbox.filter(is_read=False, datetime_received__gte=tz_time)
#针对包含指定标题内容来自指定用户的邮件进行自动回复。比如自动批示等等。
Filter_items = items.filter(subject__contains='xxx', sender='XXX@XXX.com')
for item in Filter_items:
Items[0].reply_all(
subject='’,
body='xxx'
)

    通过Python不但可以对邮件数据进行自动化操作,还可以对日历,任务,联系人等进行管理。接下来我们来看一下通过Python如何对邮箱中的会议日程\日历进行自动化管理。首先我们导入Exchangelib中的日历相关模块。CalendarItem类允许您发送您发起的会议请求或取消之前已经安排的会议。还可以处理接收到的MeetingRequest消息。您可以使用AcceptItem、TentativelyAcceptItem和DeclineItem类答复这些消息。

from exchangelib import CalendarItem
from exchangelib.items import MeetingRequest, MeetingCancellation,SEND_TO_ALL_AND_SAVE_COPY

2.1会议日程创建的实现如下:

# EWSTimeZone.localzone()用来获取本地的时区信息 便于将日期转换成本地时区的日期
tz = EWSTimeZone.localzone()
# CalenderItem用来准备会议日程的信息:比如开始时间和结束时间,主题,会议邀请正文,参会人等等
item = CalendarItem(
account=account,
folder=account.calendar,
start=dt.datetime(2021, 4, 15, 11, 0, 0, 0, tz),
end=dt.datetime(2021, 4, 15, 12, 0, 0, 0, tz),
subject="For Test",
body="meeting test",
required_attendees=['xxx@xxx.com,'xxx@xxx.com']
)
# item.save()用来发送会议邀请邮件
item.save(send_meeting_invitations=SEND_TO_ALL_AND_SAVE_COPY)

2.1会议日程获取的实现如下:

# 比如我们要获取某一天内的所有会议日程
calendars = account.calendar.all().filter(datetime_received__range=(
dt.datetime(2021, 4, 14, 23, 59, 59, 0, tz),
dt.datetime(2021, 4, 15, 23, 59, 59, 0, tz)
))
# 将会议日程的标题打印输出并查看
for calendar in calendars:
print(calendar.subject)

2.2会议日程取消的实现如下:

取消邮件标题为’For Test’的会议日程。取消命令为“calendar.cancel()”。calendar.subject.find()用来进行关键字查找,用于查找对应的邮件项。

for calendar in calendars:
if calendar.organizer.email_address == account.primary_smtp_address and calendar.subject.find('For Test') >= 0:
calendar.cancel()

2.2自动接收会议邀请的实现如下:

    #通过对收件箱邮件的过滤,得到会议邀请邮件。然后针对该类型邮件可以按照如下操作接受会议邀请,拒绝会议邀请,暂时接受会议邀请。Body中可以我定义回复的邮件正文内容。

for item in items:
if isinstance(item,MeetingRequest):
item.accept(body="Accpeted")#接受会议邀请
item.decline(body="sorry, I have no time")#拒绝会议邀请
item.tentatively_accept(body="I'll join if I'm free at that time")#暂时接受会议邀请

    实际上Exchange邮箱里的数据,不管是日历还是邮件都是基于文件夹结构的。我们可以通过命令”print(account.root.tree())”来查看邮箱的目录结构。

    通过对以上的介绍,相信大家已经能够掌握基于Python的邮箱和日历的基本操作方法。在实际的自动化应用中,我们可以基于不同需求来进行定向开发。基于不同的条件自动化处理相应的数据。

    在IT运维中,可以基于我们以上的知识点来获取指定类型邮件,提取邮件关键信息进行自动处理或者汇总起来以邮件报告的形式自动发送出来以供查看。这些都是非常好的自动化应该场景。在日常办公中,也可以基于我们针对会议日程的知识点来实现自动化处理会议邀请邮件,定期删除或者存档日历信息等操作。

    如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到806549072,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术

使用Python自动化管理Exchange邮箱相关推荐

  1. 用Python自动化管理邮件简直太方便了,三个实用小例子带你体会!

    ‍‍ 大家好,我是早起. 在之前的文章中我们已经了解如何对自己的邮箱做一些代码操作前的基础配置,以及通过 Python 代码收发.读取邮件.本文将简单复习之前的部分重点内容,并通过 3 个小案例进一步 ...

  2. python自动化登录163邮箱发送邮件

    记录第一次自动化发送邮件成功 第一步 准备好 HTMLTestRunner.py文件放在下面这个路径 第二步 创建 "Mail163.yaml" 存放信息 testURL: 'ht ...

  3. python 自动化 mysql 部署_Python自动化管理Mysql数据库教程

    Python自动化管理Mysql数据库教程 发布时间:2020-05-28 11:14:31 来源:51CTO 阅读:238 作者:三月 下面一起来了解下Python自动化管理Mysql数据库教程,相 ...

  4. powershell自动化操作AD域、Exchange邮箱系列(1)——powershell 简介

    从今天开始,系统的整理一下使用powershell自动化管理AD域账号.exchange邮箱账号的流程,最终我们将实现一个通过Web端调用powershell脚本实现的域控 邮箱管理系统. 目录 一. ...

  5. 易宝典文章——怎样管理Exchange Server 2013邮箱地址

    对于一个用户邮箱,即邮箱收件人来讲,在创建时Exchange会为其按照Alias分配一个邮件地址,即主邮件地址,也称为"主SMTP地址"或"默认答复地址".但是 ...

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

    最近想把公司邮箱的附件给下载下来,附件好多都是我整理的报告和文档,一个个去下载明显太傻,碰到这种问题第一个想到的就是Python啦 需求很简单,只需要登录自己的Exchange邮箱,然后遍历所有邮件, ...

  7. 管理exchange 2010用户邮箱本地移动请求

    在邮件管理过程中,有些时候我们需要将用户邮箱从一个数据库移动到另外一个数据库,比如我们有可能需要将还原到恢复数据库的邮箱移动到正常使用中的业务数据库中. 移动请求是将邮箱从一个邮箱数据库移动到另一个邮 ...

  8. Python爬虫系列之MeiTuan优选商家端商品自动化管理(商品发布、商品排期、订单采集)

    Python爬虫系列之MeiTuan优选商家端商品自动化管理(商品发布.商品排期.订单采集) 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 & ...

  9. 【逗老师带你学IT】HUAWEI华为防火墙自动化运维Python ssh管理网络设备

    本文,介绍一种.通过Django框架,搭建API服务器,并通过此API服务器管理华为防火墙.并以此衍生出,通过Django+Python+ssh的方式管理网络设备的方法. 关于Django环境的搭建, ...

  10. powershell自动化操作AD域、Exchange邮箱系列(10)—获取Exchange邮箱用户配额并导出excel

    目录 需求 导出结果 脚本 脚本源码 需求 将exchange邮箱服务器所有用户的邮箱配额相关信息全部导出到Excel表中,进行统计. 导出结果 脚本

最新文章

  1. 分布式存储系统的关键技术-针对应用和负载的存储优化技术
  2. JavaScript之表单元素操作
  3. mysql 本地登录失败 - 已授权
  4. torch中Dataset的构造与解读
  5. linux AB测试
  6. WebPack 简明学习教程
  7. Fedora 16 更新源设置[zz]
  8. Unity3D-射线效果
  9. LTE时域、频域资源
  10. 基于单片机步进电机ppt答辩_智能小车答辩课件.ppt
  11. [常用工具]深度学习Caffe处理工具
  12. svg基础+微信公众号交互(一)
  13. 华为nova6开启开发者模式,连接USB
  14. 快来和网红 ChatGPT 聊天!!
  15. 如何查看计算机是否新装了硬盘,如何查看笔记本电脑换固态硬盘 判断笔记本电脑是否可换固态硬盘的技巧...
  16. MicroPython-On-ESP8266——数码管的使用,2片HC595驱动四位数码管
  17. FTP协议(指令集)
  18. M1芯片实现Kail虚拟机(无Parallels)
  19. 南大计算机博士黄鑫,南京大学软件学院张贺教授团队在经验软件工程方法学研究中取得重要成果...
  20. 写程序关键是真正自己开始动手写,不要总是想着等全部弄懂了再写

热门文章

  1. C# winform 工具箱、控件类型简介表
  2. html table自动序号,layui 给数据表格加序号的方法
  3. windows的hosts文件位置
  4. Kali安装beef-xss
  5. matplotlib用Times New Roman且不加粗
  6. 易语言5.8袖珍绿色免安装
  7. ros 控制xbox_从提示框:在Windows中控制Xbox控制器,在夏天保持计算机凉爽以及DIY图书扫描装置...
  8. html的excel表格自动换行,excel自动换行总结
  9. 软考网络规划设计师知识点总结--第一章(计算机网络概论)
  10. growup怎么读_欧路词典|英汉-汉英词典 grow up是什么意思_grow up的中文解释和发音_grow up的翻译_grow up怎么读...