自動下載郵件_指定郵件


一、說明:

在工作中有時需要去郵箱中下載郵件。然后在做處理。

每天都下載比較麻煩,所以要使用寫個python腳本。

完成對指定文件的下載。

python版本:3.7

編輯器:Pycharm

 

 

二、需求

需求說明:

日期:今天(也就是2020-03-18)

郵件中的附件名稱:ceshi2

也可以理解為下載今天最后一個帶有"ceshi"字符串的附件的郵件。

 

 

 

三、代碼

qq郵箱密碼:不是qq密碼,不是QQ郵箱的獨立密碼,而是QQ郵箱的授權碼。

 

 

 四、代碼展示

 

#encoding=utf-8
import poplib
import timei
mport
email from email.parser import Parser from email.header import decode_header import datetime # 輸入郵件地址, 口令和POP3服務器地址: mail_config= ['1234556***@qq.com', '*******'] email_add=mail_config[0] password=mail_config[1] # 不是qq密碼,也不是郵箱的獨立密碼,而是POP3的授權碼 pop3_server='pop.qq.com' poplib._MAXLINE = 2048000000 def get_email_file(everyday): ## 連接到POP3服務器,有些郵箱服務器需要ssl加密,對於不需要加密的服務器可以使用poplib.POP3() server = poplib.POP3_SSL(pop3_server) server.set_debuglevel(1) # 打印POP3服務器的歡迎文字: print(server.getwelcome().decode('utf-8')) # 身份認證: server.user(email_add) server.pass_(password) # 返回郵件數量和占用空間: print('Messages: %s. Size: %s' % server.stat()) # list()返回所有郵件的編號: resp, mails, octets = server.list() # 可以查看返回的列表類似[b'1 82923', b'2 2184', ...] # print(mails) # print('server.list:', server.list()) index = len(mails) for i in range(index, 0, -1): # 倒序遍歷郵件 # try: print(i,'*'*10) # if i<199:break resp, lines, octets = server.retr(i) # print('server.retr(i):', server.retr(i)) # print(lines) # lines存儲了郵件的原始文本的每一行, # 郵件的原始文本: msg_content = b'\r\n'.join(lines).decode('utf-8') # print('msg_content:', msg_content) # 解析郵件: msg = Parser().parsestr(msg_content) # 獲取郵件時間 date1 = time.strptime(msg.get("Date")[0:24], '%a, %d %b %Y %H:%M:%S') # 格式化收件時間 date2 = time.strftime("%Y-%m-%d", date1) # 郵件時間格式轉換 the_date=time.strftime("%Y-%m-%d %H%M%S", date1) print(everyday,'\t',date2) if (date2 < everyday) : print("以下日期附件已經下載,不再執行下載任務"+"="*10) # continue break if get_att(the_date,msg): # 獲取附件; break # 當拿到指定文件時(當有多個時,為最后一個發送的文件),便終止程序 server.quit() def get_att(the_date,msg): attachment_files = [] for part in msg.walk(): file_name = part.get_filename() # 獲取附件名稱類型 contType = part.get_content_type() # print('contType:', contType) if file_name: h = email.header.Header(file_name) dh = email.header.decode_header(h) # 對附件名稱進行解碼 filename = dh[0][0] if dh[0][1]: filename = decode_str(str(filename, dh[0][1])) # 將附件名稱可讀化 print(filename) # filename = filename.encode("utf-8") if 'ceshi' in filename : # 判讀是否是所需郵件的附件 data = part.get_payload(decode=True) # 下載附件 filename = '測試'+the_date+'.xlsx' #修改下載文件名稱,可以指定中文,如不修改不指定值 att_file = open('D:\\a\\' + filename, 'wb') # 在指定目錄下創建文件,注意二進制文件需要用wb模式打開 attachment_files.append(filename) att_file.write(data) # 保存附件 att_file.close() return attachment_files def decode_str(s): # 字符編碼轉換 value, charset = decode_header(s)[0] if charset: value = value.decode(charset) return value if __name__ == "__main__": today=datetime.date.today() yesterday = today - datetime.timedelta(days=0) everyday=datetime.date.strftime(yesterday, "%Y-%m-%d") get_email_file(everyday)

 

 

五、結果展示

5.1 當拿到ceshi2的時候就終止了密碼。

 

 

 

5.2 下載展示:

 

 

六、進一步處理

6.1 代碼稍加修改可以完成整天的附件下載

6.2 下載下來的郵件可以用python在讀取,上傳到數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM