python如何读取邮件数据以及下载附件的实例详解

这篇文章主要介绍了详解python读取邮件数据并下载附件的实例的相关资料,这里提供实现实例,帮助大家学习理解这部分内容,需要的朋友可以参考下

详解python实现读取邮件数据并下载附件的实例

实现结果图:

python如何读取邮件数据以及下载附件的实例详解

实现代码:

立即学习“Python免费学习笔记(深入)”;

#!/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对象获取编码:  charset = msg.get_charset()  if charset is None:    # 如果获取不到,再从Content-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存在于根对象上:  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 ' % (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用于缩进显示: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服务器地址:  emailaddress = 'xxxxxx@163.com'  # 注意使用开通POP,SMTP等的授权码  password = 'xxxxxx'  pop3_server = 'pop.163.com'  # 连接到POP3服务器:  server = poplib.POP3(pop3_server)  # 可以打开或关闭调试信息:  # server.set_debuglevel(1)  # POP3服务器的欢迎文字:  print server.getwelcome()  # 身份认证:  server.user(emailaddress)  server.pass_(password)  # stat()返回邮件数量和占用空间:  messagesCount, messagesSize = server.stat()  print 'messagesCount:', messagesCount  print 'messagesSize:', messagesSize  # list()返回所有邮件的编号:  resp, mails, octets = server.list()  print '------ resp ------'  print resp # +OK 46 964346 响应的状态 邮件数量 邮件占用的空间大小  print '------ mails ------'  print mails # 所有邮件的编号及大小的编号list,['1 2211', '2 29908', ...]  print '------ octets ------'  print octets  # 获取最新一封邮件, 注意索引号从1开始:  length = len(mails)  for i in range(length):    resp, lines, octets = server.retr(i + 1)    # lines存储了邮件的原始文本的每一行,    # 可以获得整个邮件的原始文本:    msg_content = ''.join(lines)    # 把邮件内容解析为Message对象:    msg = Parser().parsestr(msg_content)    # 但是这个Message对象本身可能是一个MIMEMultipart对象,即包含嵌套的其他MIMEBase对象,    # 嵌套可能还不止一层。所以我们要递归地打印出Message对象的层次结构:    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  # 关闭连接:  server.quit()

登录后复制

以上就是python如何读取邮件数据以及下载附件的实例详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2267546.html

(0)
上一篇 2025年2月27日 10:08:55
下一篇 2025年2月19日 06:38:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python实现图片识别功能的示例分享

    这篇文章主要介绍了python编程实现的图片识别功能,涉及python pil模块的安装与使用技巧,需要的朋友可以参考下 本文实例讲述了Python编程实现的图片识别功能。分享给大家供大家参考,具体如下: 1. 安装PIL,官方没有WIN6…

    编程技术 2025年2月27日
    000
  • 学习Python的几个不同阶段

    前言 王国维在《人间词话》中将读书分为了三种境界:“古今之成大事业、大学问者,必经过三种之境界:‘昨夜西风凋碧树,独上高楼,望尽天涯路’。此第一境也。‘衣带渐宽终不悔,为伊消得人憔悴。’此第二境也。‘众里寻他千百度,蓦然回首,那人却在灯火阑…

    2025年2月27日
    200
  • Python学习法则

    Python上手很容易, 基本有其他语言编程经验的人可以在1周内学会Python最基本的内容. 它们包括: 1.常用内置类型(int, float, bool, bytes, str, list, dict, set)的使用. 2.分支if…

    编程技术 2025年2月27日
    200
  • Python中如何使用字符串调用函数与方法的示例分享

    字符串作为python中常用的数据类型,掌握字符串的常用方法十分必要。下面这篇文章主要给大家介绍了关于python中通过字符串调用函数或方法的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。 前言 本文主要给大家介绍了关于Python用…

    编程技术 2025年2月27日
    200
  • 关于Python中LEGB与闭包以及装饰器的具体讲解

    这篇文章主要介绍了详解 python中legb和闭包及装饰器的相关资料,主要介绍了函数作用域和闭包的理解和使用方法及python中的装饰器,需要的朋友可以参考下 详解 Python中LEGB和闭包及装饰器 LEGB L>E>G?…

    编程技术 2025年2月27日
    200
  • python中的函数介绍

    下面是我做的几个用列: 1 #python中的函数定义,使用和传参 2 def_str = ”’ 3 python中的函数以如下形式声明: 4 5 def 函数名称([参数1,参数2,参数3……]): 6 执行语句 7 8 如: …

    编程技术 2025年2月27日
    200
  • Python函数基础入门

    本篇文章将介绍如何将语句组织成函数,以及参数概念以及在程序中的用途,需要的朋友可以参考下 Pythond 的函数是由一个新的语句编写,即def,def是可执行的语句–函数并不存在,直到Python运行了def后才存在。 函数是通…

    编程技术 2025年2月27日
    200
  • python函数用法总结

    空函数 如果想定义一个什么事也不做的空函数,可以用pass语句: def nop(): pass 登录后复制 pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让…

    2025年2月27日 编程技术
    200
  • Python函数中的可变参数定义方法以及参数的传递方法解析

    这篇文章主要介绍了详解python函数可变参数定义及其参数传递方式的相关资料,这里提供实例代码帮助大家学习理解这部分内容,需要的朋友可以参考下 Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1…

    编程技术 2025年2月27日
    200
  • Python——将import方法引入模块

    这篇文章主要介绍了详解python import方法引入模块的实例的相关资料,在python用import或者from…import或者from…import…as…来导入相应的模块,需要的朋友可以参考下 详解Python import方法…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论