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

其實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() 另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞標題:python+POP3實現批量下載郵件附件-創新互聯
網站網址:http://www.yijiale78.com/article32/ddhhsc.html
成都網站建設公司_創新互聯,為您提供軟件開發、面包屑導航、App開發、App設計、網站建設、云服務器
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯