自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用Python自動(dòng)化管理郵件簡(jiǎn)直太方便了,三個(gè)實(shí)用小例子帶你體會(huì)!

開(kāi)發(fā) 后端 自動(dòng)化
本文將簡(jiǎn)單復(fù)習(xí)之前的部分重點(diǎn)內(nèi)容,并通過(guò) 3 個(gè)小案例進(jìn)一步分享一個(gè)實(shí)用技巧:將郵件寫入 Excel 中。

 [[381369]]

本文轉(zhuǎn)載自微信公眾號(hào)「早起Python」,作者自動(dòng)化工作組。轉(zhuǎn)載本文請(qǐng)聯(lián)系早起Python公眾號(hào)。   

大家好,我是早起。

在之前的文章中我們已經(jīng)了解如何對(duì)自己的郵箱做一些代碼操作前的基礎(chǔ)配置,以及通過(guò) Python 代碼收發(fā)、讀取郵件。本文將簡(jiǎn)單復(fù)習(xí)之前的部分重點(diǎn)內(nèi)容,并通過(guò) 3 個(gè)小案例進(jìn)一步分享一個(gè)實(shí)用技巧:將郵件寫入 Excel 中

之前的文章中我們也提到,基礎(chǔ)配置需要打開(kāi) POP3/SMTP/IMAP,針對(duì)不同郵箱有不同的操作,并以網(wǎng)易 163 郵箱和 QQ 郵箱 舉例說(shuō)明,其他郵箱設(shè)置基本類似。

如果你來(lái)不及看,至少需要了解下面幾個(gè)概念

 

為了體現(xiàn)通用性,這次我們?cè)贀Q一個(gè)郵箱講解,下面的案例均以 88 完美郵箱 為例示范,本文主要將分為下面兩個(gè)部分介紹

  • imbox 收取郵件
  • openpyxl 寫入 Excel 文件

案例一

“將郵箱里所有郵件的相關(guān)信息存到 Excel 中備份

”要解決這個(gè)需求,首先我們利用 keyring 庫(kù),通過(guò)系統(tǒng)密鑰環(huán)將開(kāi)啟 IMAP/SMTP服務(wù)后獲得的密碼(授權(quán)碼)預(yù)先在本地存儲(chǔ)好。首先打開(kāi)命令行輸入python后輸入:

  1. import keyring 
  2. keyring.set_password("88mail""test@88.com""password"

這樣 password 在本地存儲(chǔ)好了,后面只需要 keyring.get_password 獲取作為變量即可:

  1. import keyring 
  2. password = keyring.get_password('88mail''test@88.com'

打開(kāi) 88 郵箱的網(wǎng)頁(yè)版,進(jìn)一步確認(rèn)是否配置是否完成,以及服務(wù)器郵箱:

 

用 imbox 讀取郵件的代碼如下:

  1. import keyring  
  2. from imbox import Imbox 
  3. password = keyring.get_password('88mail''test@88.com'
  4.  
  5. with Imbox('imap.88.com''test@88.com'password, ssl=Trueas imbox:  
  6.     # 獲取全部郵件 
  7.     all_inbox_messages = imbox.messages() # 獲取全部郵件 
  8.     for uid, message in all_inbox_messages: 
  9.         print(uid) # 郵件編號(hào) 
  10.         print(message.sent_from) # 發(fā)件人 
  11.         print(message.subject)  # 郵件主題 
  12.         print(message.date) # 日期 
  13.         print(message.body['plain']) # 郵件文本格式正文 
  14.         print(message.attachments) # 附件 

關(guān)于上面的代碼有幾個(gè)地方需要注意一下:

  • Imbox('imap.qq.com', 'xxx@qq.com', password, ssl=True) 這行代碼中需要填寫服務(wù)器、用戶名郵箱、密碼、SSL加密
  • 循環(huán)體中 uid 參數(shù)是每封郵件的編號(hào),郵件編號(hào)十分重要,可以用于郵件的標(biāo)記和刪除
  • message.sent_from 返回一個(gè)包裹字典的列表,這個(gè)字典有兩個(gè)鍵:name 和 email,name 即用戶名(或昵稱),email 是發(fā)件人的郵箱
  • message.date 獲取的字符串內(nèi)容如 'Tue, 3 Nov 2020 08:08:16 +0800 (GMT+08:00)' ,一個(gè) GMT 格式的時(shí)間,我們需要將它轉(zhuǎn)化為正常的日期(年月日)+時(shí)間(時(shí)分秒),也就是將 GMT 時(shí)間格式的字符串轉(zhuǎn)換成datetime 類型,可以通過(guò)下面的代碼:
  1. import datetime 
  2.  
  3. date = 'Tue, 3 Nov 2020 08:08:16 +0800 (GMT+08:00)' 
  4. GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)' 
  5.  
  6. print(datetime.datetime.strptime(date, GMT_FORMAT)) 
  7. # 2020-11-03 08:08:16 

同樣需要注意的是

message.body['plain'] 正文以字符串列表形式返回

message.attachments 輸出結(jié)果舉例如下:

  1. [{'content-type''application/x-zip-compressed''size': 1160851, 'content': <_io.BytesIO object at 0x046A7B68>, 'filename''xxxx.zip'}] 

也是一個(gè)字典列表,一個(gè)附件為一個(gè)字典,包括 content-type size content filename 4 個(gè)鍵,即類型、大小、內(nèi)容、文件名。若無(wú)附件則返回空列表。

有了上面的知識(shí)我們就可以重新把郵件的關(guān)鍵信息都解析成字符串形式方便存儲(chǔ):

  1. import keyring  
  2. from imbox import Imbox 
  3. import datetime 
  4.  
  5. password = keyring.get_password('88mail''test@88.com'
  6.  
  7. with Imbox('imap.88.com''test@88.com'password, ssl=Trueas imbox:  
  8.     all_inbox_messages = imbox.messages() # 獲取全部郵件 
  9.     for uid, message in all_inbox_messages: 
  10.         name = message.sent_from[0]['name'] # 發(fā)件人姓名 
  11.         email = message.sent_from[0]['email'] # 發(fā)件人郵箱 
  12.         title = message.subject 
  13.  
  14.         GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)' 
  15.         email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT)) 
  16.         email_date = email_datetime.strip()[0] # 發(fā)送日期 
  17.         email_time = email_datetime.strip()[1] # 發(fā)送時(shí)間 
  18.  
  19.         text = message.body['plain'] # 文本格式正文 
  20.         attachment_lst = [] 
  21.         attachments = '' 
  22.         if message.attachments: 
  23.             for attachment in message.attachments: 
  24.                 attachment_lst.append(attachment['filename']) 
  25.             attachments = ', '.join(attachment_lst) 
  26.         print(uid, name, email, title, email_date, email_time) 
  27.         print(text, attachments if attachments else '無(wú)'

接著利用 openpyxl 寫入上述信息即可,首先在程序開(kāi)頭創(chuàng)建好表頭,明確存儲(chǔ)的信息:

  1. from openpyxl import Workbook 
  2.  
  3. workbook = Workbook() # 創(chuàng)建新工作簿 
  4. sheet = workbook.active 
  5. heading = ['郵件名''發(fā)件人姓名''發(fā)件人郵箱''發(fā)送日期''發(fā)送時(shí)間''郵件正文''附件'
  6. sheet.append(heading) 

后面隨著郵件的遍歷將內(nèi)容寫入表格即可。案例一的完整代碼如下:

  1. import keyring 
  2. from imbox import Imbox 
  3. import datetime 
  4. from openpyxl import Workbook 
  5.  
  6. workbook = Workbook() # 創(chuàng)建新工作簿 
  7. sheet = workbook.active 
  8. heading = ['郵件名''發(fā)件人姓名''發(fā)件人郵箱''發(fā)送日期''發(fā)送時(shí)間''郵件正文''附件'
  9. sheet.append(heading) 
  10.  
  11. password = keyring.get_password('88mail''test@88.com'
  12.  
  13. with Imbox('imap.88.com''test@88.com'password, ssl=Trueas imbox:  
  14.     all_inbox_messages = imbox.messages() # 獲取全部郵件 
  15.     for uid, message in all_inbox_messages: 
  16.         name = message.sent_from[0]['name'] # 發(fā)件人姓名 
  17.         email = message.sent_from[0]['email'] # 發(fā)件人郵箱 
  18.         title = message.subject 
  19.  
  20.         GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)' 
  21.         email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT)) 
  22.         email_date = email_datetime.strip()[0] # 發(fā)送日期 
  23.         email_time = email_datetime.strip()[1] # 發(fā)送時(shí)間 
  24.  
  25.         text = message.body['plain'] # 文本格式正文 
  26.         attachment_lst = [] 
  27.         attachments = '' 
  28.         if message.attachments: 
  29.             for attachment in message.attachments: 
  30.                 attachment_lst.append(attachment['filename']) 
  31.             attachments = ', '.join(attachment_lst) 
  32.         sheet.append([title, name, email, email_date, email_time, text, attachments]) 
  33.  
  34. workbook.save('xxxxx.xlsx'

案例二

“備份收件箱中所有小明(xiaoming@qq.com)發(fā)來(lái)的郵件至 Excel,然后刪除這些郵件

”其實(shí)如果順利理解了案例一,那么這個(gè)案例就特別簡(jiǎn)單了 從上面的案例中我們知道,通過(guò)下面的代碼就可以獲取發(fā)件人郵箱:

  1. with Imbox('imap.88.com''test@88.com'password, ssl=Trueas imbox:  
  2.     all_inbox_messages = imbox.messages()  
  3.     for uid, message in all_inbox_messages: 
  4.         email = message.sent_from[0]['email'] # 發(fā)件人郵箱 

那么只需要在這個(gè)基礎(chǔ)上判斷 if email == 'xiaoming@qq.com' 就可以往后執(zhí)行相應(yīng)代碼了。另外,刪除郵件是基于郵箱編號(hào) uid 的,代碼為 imbox.delete(uid) ,具體代碼舉例:

  1. for uid, message in all_inbox_messages:  
  2.     if 滿足某種條件的郵件:  
  3.         imbox.delete(uid) 

那么,我們綜合上述兩個(gè)知識(shí)點(diǎn)以及案例一的知識(shí)延伸,就很好寫出案例二的代碼了:

  1. import keyring 
  2. from imbox import Imbox 
  3. import datetime 
  4. from openpyxl import Workbook 
  5.  
  6. workbook = Workbook()  
  7. sheet = workbook.active 
  8. heading = ['郵件名''發(fā)件人姓名''發(fā)件人郵箱''發(fā)送日期''發(fā)送時(shí)間''郵件正文''附件'
  9. sheet.append(heading) 
  10.  
  11. password = keyring.get_password('88mail''test@88.com'
  12.  
  13. with Imbox('imap.88.com''test@88.com'password, ssl=Trueas imbox:  
  14.     all_inbox_messages = imbox.messages()  
  15.     for uid, message in all_inbox_messages: 
  16.         email = message.sent_from[0]['email']  
  17.         if email == 'xiaoming@qq.com': # 在此處判斷發(fā)件人 
  18.             name = message.sent_from[0]['name'
  19.             title = message.subject 
  20.             GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)' 
  21.             email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT)) 
  22.             email_date = email_datetime.strip()[0] 
  23.             email_time = email_datetime.strip()[1] 
  24.             text = message.body['plain'
  25.             attachment_lst = [] 
  26.             attachments = '' 
  27.             if message.attachments: 
  28.                 for attachment in message.attachments: 
  29.                     attachment_lst.append(attachment['filename']) 
  30.                 attachments = ', '.join(attachment_lst) 
  31.             sheet.append([title, name, email, email_date, email_time, text, attachments]) 
  32.             imbox.delete(uid) # 在此處刪除符合要求的郵件  
  33.              
  34. workbook.save('xxxxx.xlsx'

案例三

“備份收件箱中標(biāo)題含有 “獎(jiǎng)金” 的郵件至 Excel,然后紅旗標(biāo)記這些郵件

”基本思路跟案例二類似,不過(guò)多展開(kāi)講,只復(fù)習(xí)兩個(gè)知識(shí)點(diǎn)。要判斷標(biāo)題是否有“獎(jiǎng)金”二字:

  1. with Imbox('imap.88.com''test@88.com'password, ssl=Trueas imbox:  
  2.     all_inbox_messages = imbox.messages()  
  3.     for uid, message in all_inbox_messages: 
  4.         title = message.subject 
  5.         if '獎(jiǎng)金' in title: 
  6.             pass 

紅旗標(biāo)記郵件也刪除郵件一樣,也是基于郵箱編號(hào) uid 的,具體代碼舉例:

  1. for uid, message in all_inbox_messages:  
  2.     if 滿足某種條件的郵件:  
  3.         imbox.mark_flag(uid) 

故案例三的完整代碼如下:

  1. import keyring 
  2. from imbox import Imbox 
  3. import datetime 
  4. from openpyxl import Workbook 
  5.  
  6. workbook = Workbook()  
  7. sheet = workbook.active 
  8. heading = ['郵件名''發(fā)件人姓名''發(fā)件人郵箱''發(fā)送日期''發(fā)送時(shí)間''郵件正文''附件'
  9. sheet.append(heading) 
  10.  
  11. password = keyring.get_password('88mail''test@88.com'
  12.  
  13. with Imbox('imap.88.com''test@88.com'password, ssl=Trueas imbox:  
  14.     all_inbox_messages = imbox.messages()  
  15.     for uid, message in all_inbox_messages: 
  16.         title = message.subject   
  17.         if '獎(jiǎng)金' in title: # 判斷標(biāo)題是否含指定內(nèi)容 
  18.             name = message.sent_from[0]['name'
  19.             email = message.sent_from[0]['email']  
  20.             GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)' 
  21.             email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT)) 
  22.             email_date = email_datetime.strip()[0] 
  23.             email_time = email_datetime.strip()[1] 
  24.             text = message.body['plain'
  25.             attachment_lst = [] 
  26.             attachments = '' 
  27.             if message.attachments: 
  28.                 for attachment in message.attachments: 
  29.                     attachment_lst.append(attachment['filename']) 
  30.                 attachments = ', '.join(attachment_lst) 
  31.             sheet.append([title, name, email, email_date, email_time, text, attachments]) 
  32.             imbox.mark_flag(uid) # 在此處標(biāo)記符合要求的郵件  
  33.              
  34. workbook.save('xxxxx.xlsx'

以上就是通過(guò)Python實(shí)現(xiàn)郵件管理自動(dòng)化的三個(gè)實(shí)用案例,完整代碼都已經(jīng)給出,感興趣的讀者可以自行嘗試!

責(zé)任編輯:武曉燕 來(lái)源: 早起Python
相關(guān)推薦

2021-09-24 15:00:26

微信PC電腦移動(dòng)應(yīng)用

2024-09-24 17:20:16

Python自動(dòng)化辦公

2022-02-17 13:03:28

Python腳本代碼

2024-09-27 15:24:15

Spring數(shù)據(jù)加解密

2019-07-24 10:50:56

Python 開(kāi)發(fā)編程語(yǔ)言

2025-04-02 08:20:00

Python自動(dòng)化文件管理腳本模板

2024-11-13 13:14:38

2023-06-01 07:28:37

自動(dòng)化業(yè)務(wù)運(yùn)維

2022-08-19 14:16:02

Python命令

2021-09-24 09:59:59

復(fù)制粘貼PythonPDF

2025-03-03 00:00:55

Spring文件下載開(kāi)發(fā)

2022-07-15 14:26:36

開(kāi)源工具IP

2022-04-01 00:12:56

網(wǎng)絡(luò)安全SOC平衡自動(dòng)化

2022-06-15 11:01:24

云計(jì)算自動(dòng)化IT

2017-11-27 15:17:24

PythonMonkey腳本

2021-02-01 11:03:36

Python開(kāi)發(fā)郵件

2022-09-14 10:16:12

MyBatis加密解密

2011-08-29 16:19:08

惠普

2021-09-06 08:00:00

數(shù)字化轉(zhuǎn)型IT自動(dòng)化

2022-03-21 10:09:08

PythonExcel郵件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)