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 代码性能优化技巧分享
Aug 07 Python
Python生成随机密码的方法
Jun 16 Python
python基于SMTP协议发送邮件
May 31 Python
python and or用法详解
Jun 26 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
python七种方法判断字符串是否包含子串
Aug 18 Python
Python数据库封装实现代码示例解析
Sep 05 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 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
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
详解Angular6 热加载配置方案
2018/08/18 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
以一段代码为实例快速入门Python2.7
2015/03/31 Python
Python json模块使用实例
2015/04/11 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
QML实现钟表效果
2020/06/02 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
国际贸易专业个人求职信格式
2014/02/02 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
岗位安全生产责任书
2014/07/28 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
javaScript Array api梳理
2021/03/31 Javascript