• 使用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

  • 相关阅读:
    Git常用命令
    在Java中,/ 是除法运算符
    vue属性data的处理规则
    C# String转DateTime
    Vue常见的实现tab切换的两种方法
    大学生网课搜题公众号如何搭建?
    Docker 学习笔记总结(二)
    Linux驱动设备号分配与自动创建设备节点
    springboot集成flowable简单实例入门
    web网页设计期末课程大作业——汉中印象旅游景点介绍网页设计与实现19页面HTML+CSS+JavaScript
  • 原文地址:https://blog.csdn.net/gc_2299/article/details/127588537