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 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
python自定义解析简单xml格式文件的方法
May 11 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Python使用pymysql小技巧
Jun 04 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
python 拼接文件路径的方法
Oct 23 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
python 画条形图(柱状图)实例
Apr 24 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
javascript window.opener的用法分析
2010/04/07 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
JsDom 编程小结
2011/08/09 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python的词法分析与语法分析
2013/05/18 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
python实现简单成绩录入系统
2019/09/19 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
"火柴棍式"程序员面试题
2014/03/16 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
市场营销求职信范文
2014/02/21 职场文书
秋季运动会广播稿
2014/02/22 职场文书
机关作风建设工作总结
2014/10/23 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android