13.4.9 获取消息
使用fetch()方法,可以利用search()返回的标识符获取消息的内容(或部分内容),以便做进一步处理。这个方法有两个参数:要获取的消息ID和所获取消息的(多个)部分。message_ids参数是一个用逗号分隔的ID列表(例如,“1”,“1,2”)或者是一个ID区间 (如1:2)。message_parts参数是一个消息段名IMAP列表。与search()的搜索规则类似,IMAP协议指定了命名消息段,所以客户可以高效地获取它们真正需要的那部分消息。例如,要获取一个邮箱中消息的首部,可以使用fetch()并指定参数BODY.PEEK[HEADER]。

说明:还可以使用另一种方法获取首部(BODY[HEADERS]),不过这种形式有一个副作用,会隐式地将消息标志为已读,而在很多情况下并不希望如此。

import imaplib
import pprint
import imaplib_connectimaplib.Debug = 4
with imaplib_connect.open_connection() as c:c.select('INBOX',readonly=True)typ,msg_data = c.fetch('1','(BODY.PEEK[HEADER] FLAGS)')pprint.pprint(msg_data)

在这个例子中,fetch()的返回值已经被部分解析,所以与list()的返回值相比,从某种程度上讲会更难处理。可以打开调试来显示客户与服务器之间完整的交互,以理解为什么会这样。

FETCH命令的响应中,首先是标志,然后指示有595字节的首部数据。客户用这个消息响应构造一个元组,然后用一个包含右括号())的字符串(服务器在获取命令响应的最后会发送这个字符串)借宿这个序列。由于采用了这种格式,就能更容易地单独获取信息的不同部分,或者重新组合响应并在客户端解析。

import imaplib
import pprint
import imaplib_connectwith imaplib_connect.open_connection() as c:c.select('INBOX',readonly=True)print('HEADER:')typ,msg_data = c.fetch('1','(BODY.PEEK[HEADER])')for response_part in msg_data:if isinstance(response_part,tuple):print(response_part[1])print('\nBODY TEXT:')typ,msg_data = c.fetch('1','(BODY.PEEK[TEXT])')for response_part in msg_data:if isinstance(response_part,tuple):print(response_part[1])print('\nFLAGS:')typ,msg_data = c.fetch('1','(FLAGS)')for response_part in msg_data:print(response_part)print(imaplib.ParseFlags(response_part))

单独地获取值还有一个额外的好处,这样可以很容易地使用ParseFlags()解析响应中的标志。

第十二章:email-mailbox:管理email归档-imaplib:IMAP4客户库-获取消息相关推荐

  1. 第十二章:email-mailbox:管理email归档-imaplib:IMAP4客户库-邮箱状态

    13.4.5 邮箱状态 可以使用status()询问内容的有关合计信息.表13-1列出了标准中定义的状态条件. 状态条件必须被格式化为用空格分隔的字符串,并被包围在括号中--换句话说,使用IMAP4规 ...

  2. 第十二章:email-mailbox:管理email归档-imaplib:IMAP4客户库-连接服务器(认证失败)

    13.4.2 连接服务器 要建立与一个IMAP服务器的连接,有2个步骤.首先,建立套接字连接本身.其次,用服务器上的一个账户认证为用户.下面的示例代码会从一个配置文件读取服务器和用户信息. impor ...

  3. 第十二章:email-mailbox:管理email归档-imaplib:IMAP4客户库-变种

    13.4 imaplib:IMAP4客户库 imaplib实现了一个可以与IMAP4服务器通信的客户,IMAP表示internet消息访问协议(Internet Message Access Prot ...

  4. IT项目管理总结:第十二章 项目采购管理

    第十二章 项目采购管理 项目采购管理的重要性 –外包的好处: A)获得技能和技术 B)降低固定和周期性成本 C)使客户组织集中在自己的核心业务上 D)提供灵活性 E)提高可追责性 –项目采购管理(Pr ...

  5. 信息系统项目管理师---第十二章 项目采购管理

    信息系统项目管理师-第十二章项目采购管理 采购管理过程说明: •规划采购管理:决定采购什么,何时采购.还包括制定采购 SOW,评价标准等 •实施采购.从潜在的供应商处获取适当的信息.报价.投标书或建议 ...

  6. PMP 考点 第十二章 项目采购管理

    PMP 第十二章 项目采购管理 章节 序号 知识点 考点级别 备注 第十二章 项目采购管理 12.1 采购活动的职责和典型步骤.供方选择分析.采购管理计划.采购策略 3 12.2 合同类型.采购文件. ...

  7. Linux(b站视频兄弟连)自学笔记第十二章——Linux服务管理

    Linux(b站视频兄弟连)自学笔记第十二章--Linux服务管理 服务分类 RPM包安装服务的管理 独立服务的管理 基于xinetd 的服务管理 源码包服务管理 服务分类 RPM包安装服务的管理 独 ...

  8. 《DAMA数据管理知识体系指南》读书笔记-第十二章(元数据管理)

    目录 一.前言 二.内容结构 三.主要内容 1.引言 2.活动 3.工具 4.方法 5.实施指南 6.元数据治理 四.思考与总结 一.前言 本文是<DAMA数据管理知识体系指南>第12章的 ...

  9. 项目管理笔记-第十二章 项目采购管理

    1.项目采购管理包括从项目团队外部采购或获取所需产品.服务或成果的各个过程,包括编制和管理协议所需的管理和控制过程,例如:合同.订购单.协议备忘录(MOA).服务水平协议(SLA).被授权采购的可以是 ...

最新文章

  1. MySQL数据表的创建、查看、插入
  2. php mail ld preload,读《利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令》有感...
  3. 如何发现假库存照片(并将合适的人归于属性)
  4. [react] 在react中什么是合成事件?有什么用?
  5. 继刺甲蜂之后的飞鸽传书
  6. AndroidStudio安卓原生开发_Activity的启动方法_隐式启动2种方法_activity关闭---Android原生开发工作笔记83
  7. java linkedlist 更新_Java填坑系列之LinkedList
  8. 大龄屌丝自学笔记--Java零基础到菜鸟--006
  9. LINUX下载编译libffi
  10. NLP 推荐算法 论文+博客整理
  11. 微信抽奖系统源码 v3.0
  12. w ndows10专业版连接不上网,Win10电脑连不上网怎么回事?Win10电脑连不上网解决办法...
  13. java版b2b2c社交电商spring cloud分布式微服务 (三) 服务消费者(Feign)
  14. 梅科尔工作室-OpenEuler培训第二讲笔记
  15. 自学iOS开发系列----UI(视图编程入门:UIScrollView)
  16. 最长单词(LintCode)
  17. matlab的omega0是什么,【铁虫】我喜欢的Omega被别人标记了怎么办(内有嘟嘟)
  18. 华为手机怎么用云歌_华为手机功能之语音助手小艺,带你了解小艺的使用方式...
  19. 打造地图拼接利器(六)GMap.net内动态显示和更新经纬网络
  20. 10年测试经验,在35岁的生理年龄面前,一文不值

热门文章

  1. 焱融科技加入中国通信工业协会人工智能专业委员会,共创数智新未来
  2. 中小型商城系统中的分类/产品属性/扩展属性的数据库设计
  3. 嵌入式课程设计 —— STM32串口编程
  4. Javase面向对象8:设计模式、枚举、注解、单元测试、包装类
  5. PHP类 const常量访问方法例子
  6. 【项目】壁纸微信小程序
  7. AnyDesk远程连接及异常处理
  8. 易基因:ChIP-seq等揭示METTL14调控哺乳动物二价结构域的表观遗传机制|科研进展
  9. 2023年燕山大学计算机专业复试指南
  10. 数据结构 - 约瑟夫环