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计算程序运行时间的方法
Dec 13 Python
Python自动连接ssh的方法
Mar 07 Python
Python实现栈的方法
May 26 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
Pytorch环境搭建与基本语法
Jun 03 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 常用字符串函数总结
2008/03/15 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
js初始化验证实例详解
2016/11/26 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python基础教程之udp端口扫描
2014/02/10 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
详解Python中的测试工具
2019/06/09 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
django2笔记之路由path语法的实现
2019/07/17 Python
python matplotlib拟合直线的实现
2019/11/19 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
关于保护环境的标语
2014/06/09 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
公司租车协议书
2015/01/29 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
交通事故代理词范文
2015/05/23 职场文书