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)
如果你想容錯,比如獲取大量郵件時可能會超時之類的,像我的需求需要下載大量附件時,我們可以創(chuàng)建為服務賬戶:
credentials = ServiceAccount(username='域名\用戶名', password='密碼')
account = Account('郵箱', credentials=credentials, autodiscover=True)
發(fā)送郵件
雖然發(fā)送郵件和我的需求沒什么關系,但稍微試驗看一下,還是很方便的,幾行代碼就搞定了。
m = Message(
account=account,#之前申明的賬戶
subject='#標題',
body='#郵件內容',
to_recipients = [Mailbox(email_address='#收件人')]
)
m.send()
文件夾(Folders)
如果要查詢你的郵件,就要使用到文件夾這個概念,比如收件箱account.inbox,發(fā)件箱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來提高你的工作效率還是不錯的,你的想到的組件基本上都有,幾行代碼輕松搞定,棒棒噠
總結
以上是生活随笔為你收集整理的python exchangelib 删除邮件_Python优雅的操作Exchange邮箱——exchangelib模块使用介绍...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习之路 | PTA(甲级)——
- 下一篇: python复杂非线性方程_非线性方程p