Поделиться через


Анализ журнала скачивания сообщений для учетной записи POP3

В этом разделе описывается структура БОЛЬШОго двоичного объекта POP3, представляющего журнал загрузки сообщений учетной записи POP3, чтобы определить сообщения, которые были загружены или удалены из этой учетной записи.

Зачем анализировать журнал загрузки сообщений?

Поставщик протокола POP для Outlook позволяет пользователям получать и скачивать новые сообщения электронной почты на локальном устройстве, а затем оставлять или удалять эти сообщения на почтовом сервере. Когда почтовый клиент проверяет наличие новых сообщений для скачивания, он должен иметь возможность идентифицировать и скачивать только новые сообщения для этого почтового ящика. Почтовый клиент делает это, сначала используя команду UIDL (Список уникальных идентификаторов), чтобы получить сопоставление каждого сообщения, которое когда-либо было доставлено в папку "Входящие" с уникальным идентификатором (UID). Клиент также получает журнал загрузки сообщений, которые были загружены или удалены для папки "Входящие" на этом клиенте. Используя карту uiD сообщений и журнал загрузки, клиент может определить, какие сообщения отсутствуют в журнале, как новые и, следовательно, должны быть загружены.

Чтобы получить журнал скачивания сообщений для папки "Входящие", выполните следующие действия:

  • Выполните действия, описанные в статье Поиск журнала загрузки сообщений для учетной записи POP3 , чтобы найти свойство PidTagAttachDataBinary , которое содержит большой двоичный объект (BLOB), представляющий журнал сообщений для учетной записи POP3.

  • Прочтите этот раздел, в котором описывается структура БОЛЬШОго двоичного объекта, а также показан пример большого двоичного объекта для определения сообщений, которые были скачаны или удалены для папки "Входящие" учетной записи POP3.

Структура БОЛЬШОГО ДВОИЧНОГО ОБЪЕКТА POP

Структура БОЛЬШОГО ДВОИЧНОГО ОБЪЕКТА POP, как описано в таблице 1, начинается с двух полей: Version и Count, за которыми следует число тегов ресурсов Count , каждое из которых заканчивается null.

Таблица 1. Структура большого двоичного объекта, представляющего журнал загрузки сообщений учетной записи POP3

Поле в BLOB Размер Описание
Версия
2 байта
Должно быть 3 (PBLOB_VERSION_NUM).
Count
2 байта
Количество тегов ресурсов в этом BLOB-объекте.
Тег ресурса
Переменная
0 или более строк UTF-8 с пустым завершением, которые кодируют теги ресурсов. Число строк, завершаемых значением NULL, должно совпадать с Числом.

Каждый тег ресурса указывает операцию, которая применяется к сообщению, некоторые метаданные даты и времени об операции и кодирует идентификатор пользовательского интерфейса сообщения. Формат строки тега ресурса разбивается следующим образом и подробно описан в таблице 2.

Ocyyyymmddhhmmssuuu...

Табл. 2. Структура тега ресурса

Поле в теге ресурса Размер Описание
O
1 символ
Операция, выполненная с сообщением электронной почты. Значение должно быть "+", "-" или "&", что указывает на успешную операцию получения, удаления или получения и удаления соответственно.
c
1 символ
Часть содержимого сообщения, участвующего в операции. Значение должно быть " ", "h" или "b", что указывает на содержимое ни одного, заголовка или текста соответственно.
yyyy
4 символа
Четырехзначный год операции.
MM
2 символа
Двухзначный месяц операции.
dd
2 символа
Двухзначный день операции.
hh
2 символа
Двухзначный час операции.
mm
2 символа
Двухзначная минута операции.
ss
2 символа
Двухзначная секунда операции.
uuu…
Переменная длина
Закодированный идентификатор пользовательского интерфейса сообщения.

Пример

На рисунке 1 показан пример большого двоичного объекта, представляющего журнал загрузки сообщений учетной записи POP.

Рис. 1. Пример структуры BLOB-объектов для журнала загрузки сообщений учетной записи POP3

Большой двоичный объект для истории загрузки сообщений учетной записи POP3

В зависимости от структуры, описанной в таблицах 1 и таблице 2, этот BLOB представляет журнал загрузки 23 сообщений электронной почты.

Чтобы проанализировать необработанный UID в каждом теге ресурса, имейте в виду, что uiD соответствует следующей кодировке: символы в UID в основном являются буквенно-цифровыми символами, а перед каждым небуквенно-цифровым символом предшествует символ ASCII "$" (0x24). Таким образом, символы ASCII $2d представляют небуквенно-цифровой символ "-". На рисунке 2 показан пример первого преобразования необработанного пользовательского идентификатора в теге ресурса 1 в представление ASCII, а затем преобразования любого небукенно-цифрового символа, предшествующего "$", для получения фактического uiD:

0BC535DB-EA63-11E1-A75C-00215AD7BB74

Рис. 2. Преобразование необработанного пользовательского идентификатора в теге ресурса в фактический UID сообщения

Преобразование необработанного ИД пользователя в большом двоичном объекте в фактический ИД пользователя сообщения

Для интерпретации тега ресурса 1 в этом BLOB-объекте сообщение с uiD 0BC535DB-EA63-11E1-A75C-00215AD7BB74 было успешно получено 6 сентября 2012 г. в 13:11:38.

Аналогичным образом можно проанализировать оставшиеся 22 тега ресурсов для этого BLOB-объекта.

См. также