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抽象类的新写法
Jun 18 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
Python使用googletrans报错的解决方法
Sep 25 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
python 错误处理 assert详解
Apr 20 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 Python
总结Pyinstaller打包的高级用法
Jun 28 Python
使用Python拟合函数曲线
Apr 14 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
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
PHP getName()函数讲解
2019/02/03 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
PHP7新增函数
2021/03/09 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
Python迭代用法实例教程
2014/09/08 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
Python获取系统默认字符编码的方法
2015/06/04 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python中协程用法代码详解
2018/02/10 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
什么是python类属性
2020/06/10 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
客房主管岗位职责
2013/12/09 职场文书
施工资料员的岗位职责
2013/12/22 职场文书
干部培训自我鉴定
2014/01/22 职场文书
健康状况证明书
2014/11/26 职场文书
开展警示教育活动总结
2015/05/09 职场文书
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android