分析 POP3 帐户的邮件下载历史记录
本主题介绍 POP3 BLOB 的结构,该 BLOB 代表 POP3 帐户的消息下载历史记录,以标识已在该帐户上下载或删除的消息。
为什么要分析消息下载历史记录?
适用于 Outlook 的 Pop) 提供程序的邮局协议 (允许用户在其本地设备上检索和下载新电子邮件,然后在邮件服务器上保留或删除这些电子邮件。 当邮件客户端检查要下载的新邮件时,它必须能够识别并仅下载该收件箱的新邮件。 邮件客户端首先使用 UIDL (唯一 ID 列表) 命令来获取已传递到该收件箱的每封邮件的映射, (UID) 的唯一标识符。 客户端还会获取已为该客户端上的收件箱下载或删除的邮件的邮件下载历史记录。 然后,使用消息 UID 映射和下载历史记录,客户端可以将历史记录中不存在的消息标识为新消息,因此应下载这些消息。
若要获取收件箱的邮件下载历史记录,请执行以下操作:
按照 查找 POP3 帐户的消息下载历史记录 中的步骤查找 PidTagAttachDataBinary 属性,该属性包含一个二进制大型对象, (BLOB) 表示 POP3 帐户的消息历史记录。
阅读本主题,其中介绍了 BLOB 的结构,并展示了一个示例 BLOB,用于标识已为 POP3 帐户的收件箱下载或删除的消息。
POP BLOB 结构
POP BLOB 结构(如表 1 中所述)以两个字段( 版本 和 计数)开头,后跟资源标记的 计数 数,其中每个标记都以 null 结尾。
表 1. 表示 POP3 帐户的消息下载历史记录的 BLOB 的结构
BLOB 中的字段 | Size | 说明 |
---|---|---|
版本 |
2 个字节 |
必须为 3 (PBLOB_VERSION_NUM) 。 |
Count |
2 个字节 |
此 BLOB 中的资源标记数。 |
资源标记 |
变量 |
0 个或多个以 null 结尾的 UTF-8 字符串,用于对资源标记进行编码。 以 null 结尾的字符串的数量必须与 Count 匹配。 |
每个资源标记指定应用于消息的操作、有关操作的一些日期时间元数据,并编码消息的 UID。 资源标记字符串的格式按如下所述进行细分,并进一步说明在表 2 中。
Ocyyyymmddhhmmssuuu...
表 2. 资源标记的结构
资源标记中的字段 | Size | 说明 |
---|---|---|
O |
1 个字符 |
对电子邮件执行的操作。 该值必须为“+”、“-”或“&”,这分别指示获取、删除或 get-and-delete 操作成功。 |
c |
1 个字符 |
操作中涉及的消息内容部分。 该值必须为“、”h“或”b“,分别指示无内容、标头或正文的内容。 |
yyyy |
4 个字符 |
操作的四位数年份。 |
MM |
2 个字符 |
操作的两位数月份。 |
dd |
2 个字符 |
操作的两位数日期。 |
hh |
2 个字符 |
操作的两位数小时。 |
mm |
2 个字符 |
操作的两位数分钟。 |
ss |
2 个字符 |
操作的两位数秒。 |
uuu… |
可变长度 |
消息的编码 UID。 |
示例
图 1 显示了一个 BLOB 示例,该 BLOB 表示 POP 帐户的消息下载历史记录。
图 1. POP3 帐户的消息下载历史记录的示例 BLOB 结构
根据表 1 和表 2 中所述的结构,此 BLOB 表示 23 封电子邮件的下载历史记录。
若要分析每个资源标记中的原始 UID,请注意 UID 遵循以下编码:UID 中的字符大多是字母数字字符,每个非字母数字字符前面是 ASCII 字符“$” (0x24) 。 因此,ASCII 字符 $2d 表示非字母数字字符“-”。 图 2 显示了一个示例,首先将资源标记 1 中的原始 UID 转换为 ASCII 表示形式,然后转换前面有“$”的任何非字母数字字符以生成实际 UID:
0BC535DB-EA63-11E1-A75C-00215AD7BB74
图 2. 将资源标记中的原始 UID 转换为实际消息 UID
解释此 BLOB 中的资源标记 1:2012 年 9 月 6 日 13:11:38 成功检索带有 UID 0BC535DB-EA63-11E1-A75C-00215AD7BB74
的消息。
同样,可以分析该 BLOB 的剩余 22 个资源标记。