python获取未读邮箱数目_python imaplib 获取未读邮件,email解析并按照原名下载附件...

本文介绍了如何使用Python的imaplib和email库来获取未读邮件,解析邮件内容,并按照原名下载邮件附件。通过IMAP4_SSL连接邮箱,使用search()方法查找未读邮件,然后通过fetch()方法获取邮件详细信息,最后解析邮件以下载附件。
摘要由CSDN通过智能技术生成

以下所有内容都是基于Python 2

主要内容:imaplib 查看未读邮件

email 下载邮件附件

啰嗦在前面:

python 邮件查收功能相关的模块有poplib和imaplib。分别支持POP3协议和IMAP协议。poplib更简单,支持更稳定,但是功能没有imaplib完善。没有用poplib是因为,poplib查看未读邮件更复杂一点点 ,imaplib里面有seach()方法可以通过UnSeen标签轻松获得未读邮件^ ^。

1.imaplib接收邮件

首先代码下。

imaplib模块有三个类:IMAP4 , IMAP2_SSL 和IMAP_stream,本次使用 IMAP2_SSL。

在IMAP协议中,邮件有两种标识符。一种是该封邮件在其所在文件夹里的序列号,从1到N。文件夹清空时会改变。

另一种是Unique Idengifiers(UIDs),UIDs是IMAP服务器分配给每一封邮件的,它会在不同session中保持不变。文件夹清空时仍保持不变。

IMAP4.select([mailbox[, readonly]])¶

首先选一个mailbox,默认的是'INBOX'。如果设置readonly , 表示不可对邮箱内邮件信息做更改。当你想要把读过的邮件设置为已读,此处需设置readonly = False。图片的代码没有改参数,默认是True。

IMAP4.search(charset,criterion[,..])

该方法返回值是一个tuple。像酱紫 ('OK', ['196 198 199']) ,对我们有用的是1位的list,数字就是邮件的UIDs。利用该UIDs我们可以对特定的邮件进行操作。

IMAP4.fetch(message_set, message_parts)¶

获取邮件,返回值是邮件的信封和数据的元组,颇为复杂,可以自行print,慢慢理解。

截至到这里,已经获得了邮件信息,第一个图片的最后一行调用的是email模块。

邮件信息的解析共用到email的两个类:email.parser 和 email.message

首先,msg = email.message_from_string(content) 使用的实为email模块中的email.parser类

导入方法:from email.parser import Parser

可以作为email.parser实例的邮件信息对象有两类:str 和 fp

解析后的返回值同样有两种类型:MIME doc 或 包含邮件文本的字符串

(具体返回类型要看邮件是否是multi-part,即is_multipart是True,则为MIME doc;is_multipart是False 返回的是字符串。)

两种包含邮件信息对象的解析方法分别为:parsestr(text[, headersonly])¶

parse(fp[, headersonly])¶

此外,提供两种便捷方式:email.message_from_string(s[, _class[, strict]])¶ 与Parser().parsestr(s)作用相同。

(第一张图片中语句:msg = email.message_from_string(content) 等同于Parser().parsestr(content))email.message_from_file(fp[, _class[, strict]])¶ 与Parser().parse(fp)效果相同。

其次,其他的均为 email.message类

导入方法:from email.message import Message

概念上,邮件对象由headers和payloads组成。headers是RFC 2822样式字段名称和值,其中字段名称和值由冒号分隔。冒号不是字段名称或字段值的一部分。

标题被保存在表单中,匹配时不区分大小写。简单的邮件对象,payload是一个字符串。非简单邮件,payload也是MIME容器文档的Message对象列表(例如multipart / *和message / rfc822)。

下面是用到的Message 类的方法:

is_multipart()¶

如果邮件的payload是sub-message对象的列表,则返回True,否则返回False。当is_multipart()返回False时,payload是一个字符串对象。

get_payload([i[, decode]])¶

返回当前payload,当is_multipart()为True时,它将是Message对象的列表,或当is_multipart()为False时返回一个字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值