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字符串和文件操作常用函数分析
Apr 08 Python
Python实现约瑟夫环问题的方法
May 03 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
使用Python对SQLite数据库操作
Apr 06 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
keras模型可视化,层可视化及kernel可视化实例
Jan 24 Python
PyCharm 专业版安装图文教程
Feb 20 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/04/09 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
js简易版购物车功能
2017/06/17 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
Python列表推导式的使用方法
2013/11/21 Python
用python代码做configure文件
2014/07/20 Python
跟老齐学Python之总结参数的传递
2014/10/10 Python
python计算列表内各元素的个数实例
2018/06/29 Python
python实现停车管理系统
2018/11/30 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
食品采购员岗位职责
2014/04/14 职场文书
平安工地汇报材料
2014/08/19 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server