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下用于监视文件系统的pyinotify包
Nov 13 Python
Python缩进和冒号详解
Jun 01 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
python集合常见运算案例解析
Oct 17 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python实现AI换脸功能
Apr 10 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
Oracle 常见问题解答
2006/10/09 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
促销活动总结范文
2014/04/30 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
主题党日活动总结
2014/07/08 职场文书
保密工作目标责任书
2014/07/28 职场文书
村党建工作汇报材料
2014/11/02 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang