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下使用Psyco模块优化运行速度
Apr 05 Python
Python中的模块和包概念介绍
Apr 13 Python
详解Python中break语句的用法
May 14 Python
python中关于for循环的碎碎念
Jun 30 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
Dec 20 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
使用Python来开发微信功能
Jun 13 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
Django REST framework 单元测试实例解析
Nov 07 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
Python如何实现感知器的逻辑电路
Dec 25 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
vue观察模式浅析
2018/09/25 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python多线程编程中的join函数使用心得
2014/09/02 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
Python 私有化操作实例分析
2019/11/21 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
留学自荐信写作方法
2014/01/27 职场文书
网络教育自我鉴定
2014/02/04 职场文书
美术指导求职信
2014/03/17 职场文书
抽样调查项目计划书
2014/04/24 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL