• 使用Python的imaplib模块读取邮箱信息(续)


      POP3和IMAP协议都支持接收电子邮件,但前者只是单向的获取邮件信息,无法操作邮件服务器,而后者支持与邮件服务器双向通信,可以将客户端的操作反馈到邮件服务器中,如创建/删除文件夹、重命名文件夹等操作。
      imaplib中支持普通连接和SSL加密连接邮件服务器,前者使用IMAP4类,默认端口143,后者使用IMAP4_SSL类,默认端口993,本文继续上篇文章的内容,测试加密连接试QQ邮箱。
      采用用户名和授权码连接QQ邮箱,连接成功后调用list函数列出所有邮箱名称(Python中文帮助文档中给出的函数说明是“列出 directory 中与 pattern 相匹配的邮箱名称。 directory 默认为最高层级的电邮文件夹,而 pattern 默认为匹配任何文本。 返回的数据包含 LIST 响应列表。”,看不太明白,这里是照个人理解写的)。函数的返回结果及QQ邮箱中的结构如下:

    在这里插入图片描述
      从上图可以看出QQ邮箱结构与list函数返回结果之间的对应关系大致如下:

    返回值对应邮箱文件夹
    INBOX收件箱
    Sent Messages已发送
    Drafts草稿箱
    Deleted Messages已删除
    Junk垃圾箱

      然后调用select函数选择某一文件夹,默认选择收件箱,函数会返回所选文件夹中的邮件数量。

    inbox = connection.select("INBOX")
    print(inbox)
    
    deletebox = connection.select('"Deleted Messages"')
    print(deletebox)
    
    draftebox = connection.select("Drafts")
    print(draftebox)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
      这里需要说明的有两点:1)数据有可能有延迟,测试删除了一封邮件,过了十几分钟之后获取到的已删除文件夹中的邮件数量才从0变为1;2)如果文件夹名字有空格,则需要用单引号或双引号再包裹一层,如’“Deleted Messages”',否则就会报以下错误:
    在这里插入图片描述
      调用status函数可以获取指定邮件文件夹中指定状态的邮件信息,例如下面的代码获取收件箱中的邮件总数量及未读邮件数量,其返回结果如下图所示:

    print(connection.status("INBOX","(MESSAGES UNSEEN)"))
    
    • 1

    在这里插入图片描述
      调用create和delete函数可以在邮箱中新建/删除指定文件夹,新建的文件夹会放在专门的“我的文件夹”下面,如下图所示。
    在这里插入图片描述
      如果要获取邮件内容,可以调用fetch函数,该函数可以获取邮件的各个部分内容。测试代码如下所示,测试结果就不贴出来了,一堆乱码,需要专门的解析模块解析才能看到其中的结构化内容。

    res,data = connection.select("INBOX")
    res,msg_data=connection.fetch(data[0],'(UID BODY[TEXT])')
    print(msg_data)
    
    • 1
    • 2
    • 3

    参考文献:
    [1]https://docs.python.org/zh-cn/3/library/imaplib.html?highlight=imaplib
    [2]https://github.com/python/cpython/blob/3.11/Lib/imaplib.py
    [3]Python从菜鸟到高手
    [4]https://www.cnblogs.com/xiaowuyi/articles/2509451.html
    [5]https://datatracker.ietf.org/doc/html/rfc1730.html
    [6]https://datatracker.ietf.org/doc/html/rfc2060.html

  • 相关阅读:
    中文大语言模型汇总
    人工智能基础-Python之Pandas库教程
    java计算机毕业设计文件发布系统源程序+mysql+系统+lw文档+远程调试
    【leetcode面试经典150题】74. 填充每个节点的下一个右侧节点指针 II(C++)
    商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
    ue rpg学习截图(p1-p59)
    el-table实现表格整行选中状态,背景颜色切换
    HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Badge
    基于小脑模型神经网络轨迹跟踪matlab程序
    vue-cli3升级到vue-cli4,同时将vue2.6升级到vue2.7
  • 原文地址:https://blog.csdn.net/gc_2299/article/details/127588537