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中内置的itertools模块
Apr 29 Python
Python存取XML的常见方法实例分析
Mar 21 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
python3+requests接口自动化session操作方法
Oct 13 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
Django静态资源部署404问题解决方案
May 11 Python
详解python的super()的作用和原理
Oct 29 Python
Django数据模型中on_delete使用详解
Nov 30 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 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+Javascript实现在线拍照功能实例
2015/07/18 PHP
php生成图片验证码的方法
2016/04/15 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
从vue源码看props的用法
2019/01/09 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python中属性和描述符的正确使用
2016/08/23 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
python学习入门细节知识点
2018/03/29 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
django框架创建应用操作示例
2019/09/26 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
Python的历史与优缺点整理
2020/05/26 Python
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
语文教育专业求职信
2014/06/28 职场文书
公司离职证明范本
2014/10/17 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
Html5生成验证码的示例代码
2021/05/10 Javascript
如何用Python搭建gRPC服务
2021/06/30 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python