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判断变量是否已经定义的方法
Aug 18 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
python3爬虫怎样构建请求header
Dec 23 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
详解pandas映射与数据转换
Jan 22 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学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
python缩进区别分析
2014/02/15 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
python合并同类型excel表格的方法
2018/04/01 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
struct与class的区别
2014/02/03 面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
酒店应聘自荐信
2013/11/09 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
作文评语大全
2014/04/23 职场文书
力学专业求职信
2014/07/23 职场文书
小学生运动会报道稿
2014/09/12 职场文书
夫妻吵架保证书
2015/05/08 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL