Python POP3收取邮件

  • 前提条件
  • 相关介绍
  • 实验环境
  • 读取邮件
    • 获取邮箱授权码
    • 主要步骤
    • 代码实现
    • 输出结果
      • 原始文本信息
      • 解析后文本信息

前提条件

  • 熟悉Python基本语法

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
  • POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。
  • Python 内置一个 poplib 模块,实现了 POP3 协议,可以直接用来收邮件。
  • POP3 协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和 SMTP 协议很像,SMTP 发送的也是经 过编码后的一大段文本。要把 POP3 收取的文本变成可以阅读的邮件,还需要用 email 模块提供的各种 类来解析原始文本,变成可阅读的邮件对象。
  • Email模块是一个用于管理电子邮件消息的库。
  • 下图来源于《计算机网络(第7版)- 谢希仁》

实验环境

  • Python 3.x (面向对象的高级语言)
  • Emain 3.141.0 (python第三方库)
  • Smtplib (python标准库)
  • Poplib (python标准库)

读取邮件

获取邮箱授权码

以QQ邮箱为例,登录QQ邮箱->设置->账号->开启POP3/SMTP服务->生成授权码



主要步骤

  • 第一步:用 poplib 获取邮件的原始文本。
  • 第二步:用 email 解析原始文本,还原为邮件对象。

代码实现

# -*- coding: utf-8 -*-
"""
Created on 2022/03/18 12:00:00
@author: TFX
"""
import poplib
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddrdef get_origin_text(): # 获取邮件原始文本# 连接到POP3服务器pop_server = poplib.POP3("pop.qq.com")# 邮箱号pop_server.user("********@qq.com")# 授权码pop_server.pass_("********") # # stat()返回(邮件数,邮件尺寸)# print('邮件数: %s. 邮件尺寸: %s' % pop_server.stat())# list()返回所有邮件的编号列表,默认返回20个元素resp, mails, octets = pop_server.list() # 编号最大的为最新的一封# 获取最新的一封邮件(索引号从1开始)index = len(mails)# print(index)resp, lines, octets = pop_server.retr(index) # 返回(状态信息,邮件,邮件尺寸)# lines存储了邮件的原始文本的每一行,可以获得整个邮件的原始文本msg_content = b'
'.join(lines).decode('utf-8') # b表示:后面字符串是bytes类型。msg = Parser().parsestr(msg_content)# 退出连接pop_server.quit()return msgdef decode_str(s): # 解码字符串value, charset = decode_header(s)[0]if charset:value = value.decode(charset)return valuedef set_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 charsetdef parse_msg(msg):# 解析邮件头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 = '%s <%s>' % (name, addr)print('%s: %s' % (header, value))# 解析邮件正文if (msg.is_multipart()):# 如果消息由多个部分组成,则返回Trueparts = msg.get_payload() # 返回一个包含邮件所有的子对象的列表for n, part in enumerate(parts): # 枚举,遍历各个对象print('part %s' % (n))parse_msg(part)else:content_type = msg.get_content_type() # 获取邮件信息的内容类型if content_type=='text/plain' or content_type=='text/html': # 如果是纯文本或者html类型content = msg.get_payload(decode=True)# 返回一个包含邮件所有的子对象(已解码)的列表charset = set_charset(msg) # 设置字符集if charset: # 字符集不为空content = content.decode(charset) # 解码print('Text: %s' % (content))else:print('Attachment: %s' % (content_type)) # 附件if __name__=="__main__":msg = get_origin_text() # 第一步:用 poplib 获取邮件的原始文本。parse_msg(msg) # 第二步:用 email 解析原始文本,还原为邮件对象。

输出结果

原始文本信息

解析后文本信息

更多精彩内容,可点击进入Python日常小操作专栏查看

Python POP3读取邮件相关推荐

  1. python提取邮件附件_详解python实现读取邮件数据并下载附件的实例

    详解python实现读取邮件数据并下载附件的实例 实现结果图: 实现代码: #!/usr/bin/python2.7 # _*_ coding: utf-8 _*_ """ ...

  2. python中文名的发件人邮件读取解析_如何使用python收取读取邮件?

    之前给大家介绍使用python去发送邮件了,那有小伙伴提出疑问了,既然能发送,能否读取呢?如果可以用python实现,那将是个非常有趣的事情,于是小编也去查询了下,下面就给大家演示下,都来看看吧~以下 ...

  3. python自动读取邮件_Python自动化读取邮件基础代码讲解

    大家好,在之前的文章中我们已经了解如何对自己的邮箱做一些代码操作前的基础配置,也学会了通过 yagmail 发送邮件.这篇文章将分别介绍两个很实用的收取及读取邮件的库:imbox 和 poplib,主 ...

  4. E—MAIL 服务器的安装 smtp发送邮件 pop3读取邮件

    SMTP 打开服务器管理器,添加角色和功能,一路点下一步,点到功能,然后安装smtp服务器 安装完毕后,工具栏点击IIS6.0 邮件属性,打开中继限制. 重命名一下域名,用来向本地服务器发送信息 使用 ...

  5. python自动读取邮件_Python3读取邮件内容

    登录邮箱并读取原始邮件 使用imaplib库实现邮箱登录,所以需要先导入库import imaplib,然后利用imaplib库中的方法登录邮箱并读取邮件 def get_mail(email_add ...

  6. python连续读取邮件_Python读取指定日期邮件的实例

    背景:9月份有部分数据缺失,这部分数据在邮箱里,需要重新拉取,但是每天几百封邮件,总共有6.7万封邮件,使用stat()和retr(which)结合遍历很 耗时 基于如上背景,初始大致思路为: 使用二 ...

  7. python应用系列教程——python使用smtp上传邮件,使用pop3下载邮件

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用smtp上传邮件,使用pop3下载邮件.由于上传后立刻下载了,所以有时不会再在网页邮箱中有通知. 可设置邮件的收发人,主题,内 ...

  8. Python学习笔记:电子邮件,POP3收取邮件

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. python exchangelib 删除邮件_Python exchangelib在子文件夹中读取邮件 - python

    我想从Outlook邮箱的子文件夹中读取邮件. Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件 我尝试了此页面fol ...

最新文章

  1. VirtualBox的四种网络连接方式
  2. tkinter回调异常_Python tkinter文本修改后的回调
  3. 17.QT-事件处理分析、事件过滤器、拖放事件
  4. PHP-代码审计-代码执行
  5. 闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)
  6. php调用.net webservice,PHP调用.NET的WebService 简单实例
  7. QT读取csv文件并且绘制折线图
  8. 【java学习之路】(java框架)004.Mybatis SQL映射文件详解
  9. Android loopback(三)
  10. 用python开发的运维管理系统下载_GitHub - jiegangwu/OPMS_v3: 基于 Python 3.5 + Django 2.0 开发的运维管理系统...
  11. Ardusub源码解析学习(二)——电机库
  12. 免费批量修改图片MD5软件 图片处理防和谐软件
  13. Exynos4412 OV5640摄像头(一)—— 驱动
  14. 用map集合形容朋友
  15. 按键精灵X学习笔记(二):键盘命令
  16. 2016年腾讯实习生面试技术面一面二面
  17. 研发和测试在多国陆续展开 全球央行数字货币研发驶入快车道
  18. 攻防世界-warmup详解
  19. (附源码)计算机毕业设计SSM基于框架的报修系统
  20. js实现文件下载并重命名

热门文章

  1. 敏捷开发绩效管理之一:序言及“敏捷开发是否考核个人”(绩效考核)
  2. 西游记中的 “马流” 二元帅 - 我找到了
  3. 阿里钉钉亮相重庆智博会,七大资本逾10亿资金赋能钉钉生态
  4. 快速索引词向量-annoy
  5. 计算机仿真进去终审录的概率大吗,论文进入终审录用概率大吗
  6. 计算机不显示驱动硬盘,计算机硬盘分区名称不显示驱动器号
  7. 微信小程序引入iconfont渲染层网络层错误
  8. 刘海屏水滴屏小米89等安卓P底部留黑or白适配
  9. “没出息”用英语怎么说?
  10. B/S电子病历编辑器源码