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

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

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

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

参考文献:
[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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值