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装饰器decorator用法实例
Nov 10 Python
python中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
利用Python演示数型数据结构的教程
Apr 03 Python
Python内建数据结构详解
Feb 03 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
Tornado 多进程实现分析详解
Jan 12 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
python实现维吉尼亚加密法
Mar 20 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
Python-split()函数实例用法讲解
Dec 18 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 CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
jquery 批量上传图片实现代码
2010/01/28 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
亿企通软件测试面试题
2012/04/10 面试题
《蓝色的树叶》教学反思
2014/02/24 职场文书
公务员培的训心得体会
2014/09/01 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
社区党务工作总结2015
2015/05/19 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
A22国内电台短波广播频率表
2022/05/10 无线电
Windows7下FTP搭建图文教程
2022/08/05 Servers