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

首頁(yè) > 編程 > Python > 正文

詳解python實(shí)現(xiàn)讀取郵件數(shù)據(jù)并下載附件的實(shí)例

2020-01-04 17:06:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

詳解python實(shí)現(xiàn)讀取郵件數(shù)據(jù)并下載附件的實(shí)例

實(shí)現(xiàn)結(jié)果圖:

python實(shí)現(xiàn)讀取郵件數(shù)據(jù)并下載附件,Python,讀取郵件數(shù)據(jù)

實(shí)現(xiàn)代碼:

#!/usr/bin/python2.7# _*_ coding: utf-8 _*_"""@Author: MarkLiu"""import poplibimport emailfrom email.parser import Parserfrom email.header import decode_headerfrom email.utils import parseaddrdef decode_str(s):  value, charset = decode_header(s)[0]  if charset:    value = value.decode(charset)  return valuedef guess_charset(msg):  # 先從msg對(duì)象獲取編碼:  charset = msg.get_charset()  if charset is None:    # 如果獲取不到,再?gòu)腃ontent-Type字段獲取:    content_type = msg.get('Content-Type', '').lower()    pos = content_type.find('charset=')    if pos >= 0:      charset = content_type[pos + 8:].strip()  return charsetdef get_email_headers(msg):  # 郵件的From, To, Subject存在于根對(duì)象上:  headers = {}  for header in ['From', 'To', 'Subject', 'Date']:    value = msg.get(header, '')    if value:      if header == 'Date':        headers['date'] = value      if header == 'Subject':        # 需要解碼Subject字符串:        subject = decode_str(value)        headers['subject'] = subject      else:        # 需要解碼Email地址:        hdr, addr = parseaddr(value)        name = decode_str(hdr)        value = u'%s <%s>' % (name, addr)        if header == 'From':          from_address = value          headers['from'] = from_address        else:          to_address = value          headers['to'] = to_address  content_type = msg.get_content_type()  print 'head content_type: ', content_type  return headers# indent用于縮進(jìn)顯示:def get_email_cntent(message, base_save_path):  j = 0  content = ''  attachment_files = []  for part in message.walk():    j = j + 1    file_name = part.get_filename()    contentType = part.get_content_type()    # 保存附件    if file_name: # Attachment      # Decode filename      h = email.Header.Header(file_name)      dh = email.Header.decode_header(h)      filename = dh[0][0]      if dh[0][1]: # 如果包含編碼的格式,則按照該格式解碼        filename = unicode(filename, dh[0][1])        filename = filename.encode("utf-8")      data = part.get_payload(decode=True)      att_file = open(base_save_path + filename, 'wb')      attachment_files.append(filename)      att_file.write(data)      att_file.close()    elif contentType == 'text/plain' or contentType == 'text/html':      # 保存正文      data = part.get_payload(decode=True)      charset = guess_charset(part)      if charset:        charset = charset.strip().split(';')[0]        print 'charset:', charset        data = data.decode(charset)      content = data  return content, attachment_filesif __name__ == '__main__':  # 輸入郵件地址, 口令和POP3服務(wù)器地址:  emailaddress = 'xxxxxx@163.com'  # 注意使用開通POP,SMTP等的授權(quán)碼  password = 'xxxxxx'  pop3_server = 'pop.163.com'  # 連接到POP3服務(wù)器:  server = poplib.POP3(pop3_server)  # 可以打開或關(guān)閉調(diào)試信息:  # server.set_debuglevel(1)  # POP3服務(wù)器的歡迎文字:  print server.getwelcome()  # 身份認(rèn)證:  server.user(emailaddress)  server.pass_(password)  # stat()返回郵件數(shù)量和占用空間:  messagesCount, messagesSize = server.stat()  print 'messagesCount:', messagesCount  print 'messagesSize:', messagesSize  # list()返回所有郵件的編號(hào):  resp, mails, octets = server.list()  print '------ resp ------'  print resp # +OK 46 964346 響應(yīng)的狀態(tài) 郵件數(shù)量 郵件占用的空間大小  print '------ mails ------'  print mails # 所有郵件的編號(hào)及大小的編號(hào)list,['1 2211', '2 29908', ...]  print '------ octets ------'  print octets  # 獲取最新一封郵件, 注意索引號(hào)從1開始:  length = len(mails)  for i in range(length):    resp, lines, octets = server.retr(i + 1)    # lines存儲(chǔ)了郵件的原始文本的每一行,    # 可以獲得整個(gè)郵件的原始文本:    msg_content = '/n'.join(lines)    # 把郵件內(nèi)容解析為Message對(duì)象:    msg = Parser().parsestr(msg_content)    # 但是這個(gè)Message對(duì)象本身可能是一個(gè)MIMEMultipart對(duì)象,即包含嵌套的其他MIMEBase對(duì)象,    # 嵌套可能還不止一層。所以我們要遞歸地打印出Message對(duì)象的層次結(jié)構(gòu):    print '---------- 解析之后 ----------'    base_save_path = '/media/markliu/Entertainment/email_attachments/'    msg_headers = get_email_headers(msg)    content, attachment_files = get_email_cntent(msg, base_save_path)    print 'subject:', msg_headers['subject']    print 'from_address:', msg_headers['from']    print 'to_address:', msg_headers['to']    print 'date:', msg_headers['date']    print 'content:', content    print 'attachment_files: ', attachment_files  # 關(guān)閉連接:  server.quit()

以上就是python讀取郵件并下載郵件附件的實(shí)例,如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 麻栗坡县| 泸定县| 黑龙江省| 方正县| 满洲里市| 中西区| 水城县| 青龙| 姜堰市| 平南县| 当雄县| 墨玉县| 肇源县| 嵊州市| 日土县| 文成县| 苗栗县| 江永县| 如皋市| 长治市| 永仁县| 察哈| 饶河县| 旺苍县| 西安市| 南投市| 永登县| 泾源县| 油尖旺区| 平陆县| 七台河市| 安泽县| 云南省| 阳信县| 乾安县| 合山市| 康乐县| 苏州市| 成安县| 乌拉特中旗| 南江县|