国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python+POP3實現批量下載郵件附件

2020-02-15 21:55:23
字體:
來源:轉載
供稿:網友

最近新開學,接到了給老板的本科課程當助教的工作,百十來號人一學期下來得有四五次作業發進郵箱里,需要我來統計打分,想想挨個點進去下載附件的過程就頭大,于是萌生了寫個腳本來統計作業的想法。

其實python里收發郵件都有很方便的包,合理使用就好,可以解決絕大多數的郵件收發任務。但是這個腳本寫下來還是花了不少時間,其中最大的一部分時間是花在了python的編碼問題上,python2和python3的編碼預設有些許的不一樣,在python3中又取消了unicode這個方法,這就導致很多在python2中寫的例程都沒法在3中運行。

經過修改以后下面的腳本可以從郵箱中獲取指定日期范圍內的郵件附件,并存如指定目錄中。

#!/usr/bin/env python3 # -*- coding: utf-8 -*- import poplib import email import datetime import time import os import xlrd import xlwt from email.parser import Parser from email.header import decode_header from email.utils import parseaddr    # 輸入郵件地址, 口令和POP3服務器地址: email = 'xxxxxxxx@qq.com' password = 'xxxxxxxxxxx' pop3_server = 'pop.qq.com'    def decode_str(s):#字符編碼轉換   value, charset = decode_header(s)[0]   if charset:     value = value.decode(charset)   return value   def get_att(msg):   import email   attachment_files = []      for part in msg.walk():     file_name = part.get_filename()#獲取附件名稱類型     contType = part.get_content_type()          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")       data = part.get_payload(decode=True)#下載附件       att_file = open('E://L//zy//307//' + filename, 'wb')#在指定目錄下創建文件,注意二進制文件需要用wb模式打開       attachment_files.append(filename)       att_file.write(data)#保存附件       att_file.close()   return attachment_files              # 連接到POP3服務器,有些郵箱服務器需要ssl加密,對于不需要加密的服務器可以使用poplib.POP3() server = poplib.POP3_SSL(pop3_server) server.set_debuglevel(1) # 打印POP3服務器的歡迎文字: print(server.getwelcome().decode('utf-8')) # 身份認證: server.user(email) server.pass_(password) # 返回郵件數量和占用空間: print('Messages: %s. Size: %s' % server.stat()) # list()返回所有郵件的編號: resp, mails, octets = server.list() # 可以查看返回的列表類似[b'1 82923', b'2 2184', ...] print(mails) index = len(mails)    for i in range(index,0,-1):   #倒序遍歷郵件   resp, lines, octets = server.retr(i)   # lines存儲了郵件的原始文本的每一行,   #郵件的原始文本:   msg_content = b'/r/n'.join(lines).decode('utf-8')   #解析郵件:   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)#郵件時間格式轉換   if (date2<'20180306')|(date2>'20180314'):          continue   f_list = get_att(msg)#獲取附件              #print_info(msg)  server.quit()             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁晋县| 焦作市| 太仓市| 沭阳县| 新田县| 佛坪县| 邵阳县| 丹寨县| 平利县| 轮台县| 晋中市| 花垣县| 济源市| 治多县| 凤翔县| 西畴县| 宿迁市| 佛坪县| 通化县| 阆中市| 简阳市| 阜南县| 波密县| 青海省| 江油市| 苍南县| 明溪县| 平泉县| 佳木斯市| 关岭| 额尔古纳市| 深泽县| 宜州市| 湘潭市| 天长市| 贵港市| 上杭县| 五华县| 东源县| 南昌市| 福建省|