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字典多条件排序方法实例
Jun 30 Python
Python open()文件处理使用介绍
Nov 30 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
Python实现文件信息进行合并实例代码
Jan 17 Python
python opencv之SIFT算法示例
Feb 24 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
Python玩转Excel的读写改实例
Feb 22 Python
用Python配平化学方程式的方法
Jul 20 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
Python创建自己的加密货币的示例
Mar 01 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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 程序员应该使用的10个组件
2009/10/31 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
基于python监控程序是否关闭
2020/01/14 Python
Python之变量类型和if判断方式
2020/05/05 Python
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
总经理司机岗位职责
2014/02/06 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
交通事故代理词范文
2015/05/23 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
Python使用openpyxl批量处理数据
2021/06/23 Python
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python