python+POP3實(shí)現(xiàn)批量下載郵件附件-創(chuàng)新互聯(lián)

最近新開(kāi)學(xué),接到了給老板的本科課程當(dāng)助教的工作,百十來(lái)號(hào)人一學(xué)期下來(lái)得有四五次作業(yè)發(fā)進(jìn)郵箱里,需要我來(lái)統(tǒng)計(jì)打分,想想挨個(gè)點(diǎn)進(jìn)去下載附件的過(guò)程就頭大,于是萌生了寫(xiě)個(gè)腳本來(lái)統(tǒng)計(jì)作業(yè)的想法。

創(chuàng)新互聯(lián)建站長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為索縣企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè),索縣網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

其實(shí)python里收發(fā)郵件都有很方便的包,合理使用就好,可以解決絕大多數(shù)的郵件收發(fā)任務(wù)。但是這個(gè)腳本寫(xiě)下來(lái)還是花了不少時(shí)間,其中大的一部分時(shí)間是花在了python的編碼問(wèn)題上,python2和python3的編碼預(yù)設(shè)有些許的不一樣,在python3中又取消了unicode這個(gè)方法,這就導(dǎo)致很多在python2中寫(xiě)的例程都沒(méi)法在3中運(yùn)行。

經(jīng)過(guò)修改以后下面的腳本可以從郵箱中獲取指定日期范圍內(nèi)的郵件附件,并存如指定目錄中。

#!/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服務(wù)器地址: 
email = 'xxxxxxxx@qq.com' 
password = 'xxxxxxxxxxx' 
pop3_server = 'pop.qq.com' 
 
 
 
def decode_str(s):#字符編碼轉(zhuǎn)換 
  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)#對(duì)附件名稱進(jìn)行解碼 
      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')#在指定目錄下創(chuàng)建文件,注意二進(jìn)制文件需要用wb模式打開(kāi) 
      attachment_files.append(filename) 
      att_file.write(data)#保存附件 
      att_file.close() 
  return attachment_files 
 
     
       
# 連接到POP3服務(wù)器,有些郵箱服務(wù)器需要ssl加密,對(duì)于不需要加密的服務(wù)器可以使用poplib.POP3() 
server = poplib.POP3_SSL(pop3_server) 
server.set_debuglevel(1) 
# 打印POP3服務(wù)器的歡迎文字: 
print(server.getwelcome().decode('utf-8')) 
# 身份認(rèn)證: 
server.user(email) 
server.pass_(password) 
# 返回郵件數(shù)量和占用空間: 
print('Messages: %s. Size: %s' % server.stat()) 
# list()返回所有郵件的編號(hào): 
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存儲(chǔ)了郵件的原始文本的每一行, 
  #郵件的原始文本: 
  msg_content = b'\r\n'.join(lines).decode('utf-8') 
  #解析郵件: 
  msg = Parser().parsestr(msg_content) 
  #獲取郵件時(shí)間 
  date1 = time.strptime(msg.get("Date")[0:24],'%a, %d %b %Y %H:%M:%S') #格式化收件時(shí)間 
  date2 = time.strftime("%Y%m%d", date1)#郵件時(shí)間格式轉(zhuǎn)換 
  if (date2<'20180306')|(date2>'20180314'): 
     
    continue 
  f_list = get_att(msg)#獲取附件 
   
     
   
  #print_info(msg) 
 
server.quit() 

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:python+POP3實(shí)現(xiàn)批量下載郵件附件-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://muchs.cn/article32/ddhhsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、面包屑導(dǎo)航App開(kāi)發(fā)、App設(shè)計(jì)、網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管