Python实现获取邮箱内容并解析的方法示例


Posted in Python onJune 16, 2018

本文实例讲述了Python实现获取邮箱内容并解析的方法。分享给大家供大家参考,具体如下:

# -*- coding: utf-8 -*-
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
import poplib
#输入邮件地址, 口令和POP3服务器地址:
email = input('Email: ')
password = input('Password: ')
pop3_server = input('POP3 server: ')
def guess_charset(msg):
  charset = msg.get_charset()
  if charset is None:
    content_type = msg.get('Content-Type', '').lower()
    pos = content_type.find('charset=')
    if pos >= 0:
      charset = content_type[pos + 8:].strip()
  return charset
def decode_str(s):
  value, charset = decode_header(s)[0]
  if charset:
    value = value.decode(charset)
  return value
def print_info(msg, indent=0):
  if indent == 0:
    for header in ['From', 'To', 'Subject']:
      value = msg.get(header, '')
      if value:
        if header=='Subject':
          value = decode_str(value)
        else:
          hdr, addr = parseaddr(value)
          name = decode_str(hdr)
          value = u'%s <%s>' % (name, addr)
      print('%s%s: %s' % (' ' * indent, header, value))
  if (msg.is_multipart()):
    parts = msg.get_payload()
    for n, part in enumerate(parts):
      print('%spart %s' % (' ' * indent, n))
      print('%s--------------------' % (' ' * indent))
      print_info(part, indent + 1)
  else:
    content_type = msg.get_content_type()
    if content_type=='text/plain' or content_type=='text/html':
      content = msg.get_payload(decode=True)
      charset = guess_charset(msg)
      if charset:
        content = content.decode(charset)
      print('%sText: %s' % (' ' * indent, content + '...'))
    else:
      print('%sAttachment: %s' % (' ' * indent, content_type))
# 连接到POP3服务器:
server = poplib.POP3_SSL(pop3_server, 995)
# 可以打开或关闭调试信息:
server.set_debuglevel(1)
# 可选:打印POP3服务器的欢迎文字:
print(server.getwelcome().decode('utf-8'))
# 身份认证:
server.user(email)
server.pass_(password)
# stat()返回邮件数量和占用空间:
print('Messages: %s. Size: %s' % server.stat())
# list()返回所有邮件的编号:
resp, mails, octets = server.list()
# 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
print(mails)
# 获取最新一封邮件, 注意索引号从1开始:
index = len(mails)
resp, lines, octets = server.retr(index)
# lines存储了邮件的原始文本的每一行,
# 可以获得整个邮件的原始文本:
msg_content = b'\r\n'.join(lines).decode('utf-8')
# 稍后解析出邮件:
msg = Parser().parsestr(msg_content)
print_info(msg)
# 可以根据邮件索引号直接从服务器删除邮件:
# server.dele(index)
# 关闭连接:
server.quit()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python基于pillow判断图片完整性的方法
Sep 18 Python
OpenCV实现人脸识别
Apr 07 Python
python用户管理系统的实例讲解
Dec 23 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
python烟花效果的代码实例
Feb 25 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
python def 定义函数,调用函数方式
Jun 02 Python
python和js交互调用的方法
Jun 23 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
Python实现自定义函数的5种常见形式分析
Jun 16 #Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 #Python
Python实现简单的文本相似度分析操作详解
Jun 16 #Python
Django跨域请求问题的解决方法示例
Jun 16 #Python
Python for循环生成列表的实例
Jun 15 #Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 #Python
Python对象属性自动更新操作示例
Jun 15 #Python
You might like
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python进程间通信Queue实例解析
2018/01/25 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
什么是规则表达式
2012/05/03 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
国际商务系学生个人的自我评价
2013/11/26 职场文书
园林技术专业求职信
2014/07/28 职场文书
离婚协议书怎么写
2015/01/26 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
Django REST framework 限流功能的使用
2021/06/24 Python
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL