Python優(yōu)雅的操作Exchange郵箱——exchangelib模塊使用介紹

最近想把公司郵箱的附件給下載下來祈惶,附件好多都是我整理的報(bào)告和文檔钱贯,一個(gè)個(gè)去下載明顯太傻,碰到這種問題第一個(gè)想到的就是Python啦

需求很簡單,只需要登錄自己的Exchange郵箱线召,然后遍歷所有郵件,有附件的就下載下來多矮。

可是最主要的一步卻難倒我了缓淹,連接Exchange郵箱比較麻煩,最后找到了exchangelib這個(gè)模塊塔逃。

這個(gè)模塊網(wǎng)上的教程不多讯壶,所以這里記錄下使用過程。

安裝exchangelib

exchangelib的github地址可以點(diǎn)擊這里湾盗,可通過PyPi直接進(jìn)行安裝:

pip3 install exchangelib

具體編碼

引入模塊

exchangelib模塊挺多的伏蚊,其中Account, Credentials用來連接郵箱的,其他的根據(jù)你自身需求來吧格粪,截圖是所有模塊:

截圖1

連接郵箱

登錄郵箱編碼還是比較簡單的:

credentials = Credentials('域名\用戶名', '密碼')
account = Account('郵箱', credentials=credentials, autodiscover=True)

如果你想容錯(cuò)躏吊,比如獲取大量郵件時(shí)可能會超時(shí)之類的,像我的需求需要下載大量附件時(shí)帐萎,我們可以創(chuàng)建為服務(wù)賬戶:

credentials = ServiceAccount(username='域名\用戶名', password='密碼')
account = Account('郵箱', credentials=credentials, autodiscover=True)

發(fā)送郵件

雖然發(fā)送郵件和我的需求沒什么關(guān)系比伏,但稍微試驗(yàn)看一下,還是很方便的疆导,幾行代碼就搞定了赁项。

m = Message(
        account=account,#之前申明的賬戶
        subject='#標(biāo)題',
        body='#郵件內(nèi)容',
        to_recipients = [Mailbox(email_address='#收件人')]
    )
m.send()

文件夾(Folders)

如果要查詢你的郵件,就要使用到文件夾這個(gè)概念澈段,比如收件箱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')

但是我試驗(yàn)了一些囤耳,還是比較慢的篙顺,可能我的郵件比較多吧。

附件

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

總結(jié)

利用python來提高你的工作效率還是不錯(cuò)的,你的想到的組件基本上都有椎麦,幾行代碼輕松搞定宰僧,棒棒噠

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市观挎,隨后出現(xiàn)的幾起案子琴儿,更是在濱河造成了極大的恐慌段化,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件造成,死亡現(xiàn)場離奇詭異显熏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晒屎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門喘蟆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鼓鲁,你說我怎么就攤上這事蕴轨。” “怎么了骇吭?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵橙弱,是天一觀的道長。 經(jīng)常有香客問我燥狰,道長棘脐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任碾局,我火速辦了婚禮荆残,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘净当。我一直安慰自己内斯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布像啼。 她就那樣靜靜地躺著俘闯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忽冻。 梳的紋絲不亂的頭發(fā)上真朗,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音僧诚,去河邊找鬼遮婶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛湖笨,可吹牛的內(nèi)容都是我干的旗扑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慈省,長吁一口氣:“原來是場噩夢啊……” “哼臀防!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袱衷,失蹤者是張志新(化名)和其女友劉穎捎废,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體致燥,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡登疗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篡悟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谜叹。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匾寝,死狀恐怖搬葬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艳悔,我是刑警寧澤急凰,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站猜年,受9級特大地震影響抡锈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乔外,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一床三、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杨幼,春花似錦撇簿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至欲逃,卻和暖如春找蜜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稳析。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工洗做, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彰居。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓诚纸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裕菠。 傳聞我的和親對象是個(gè)殘疾皇子咬清,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容