Управление свойствами MAPI

Управление данными электронной почты программно может быть сложным, особенно при работе со свойствами интерфейса программирования приложений обмена сообщениями (MAPI). Эти свойства являются атрибутами или метаданными, связанными с объектами MAPI, такими как сообщения, папки, получатели и другие компоненты в системе обмена сообщениями. Эти свойства предоставляют подробную информацию об объекте, такую как тема электронной почты, адрес отправителя, дата отправки электронной почты и многое другое. Свойства MAPI широко используются в почтовых клиентах и других приложениях обмена сообщениями для управления и манипулирования данными электронной почты. Эта статья углубляется в различные методы доступа, перечисления и манипулирования свойствами MAPI с использованием Aspose.Email для .NET.

API .NET для управления свойствами MAPI в C#

Aspose.Email для .NET предоставляет всестороннюю поддержку для обработки свойств интерфейса программирования приложений обмена сообщениями, позволяя разработчикам управлять и манипулировать данными электронной почты с детальным контролем. Это также обширный API, который позволяет разработчикам оснащать свои приложения для работы с электронной почтой надежными функциями для обработки сообщений и других связанных задач.

Используя Aspose.Email для .NET, разработчики могут создавать сложные решения для управления и обработки электронной почты. Чтобы начать использовать библиотеку, вы можете скачать ее с сайта Aspose или NuGet и интегрировать в свой проект.

Категории свойств MAPI

Убедитесь, что у вас есть Aspose.Email в вашем проекте, и давайте начнем. Свойства MAPI можно классифицировать на три основные категории: стандартные свойства, именованные свойства и пользовательские (определяемые пользователем) свойства. Каждая категория служит своей цели и предоставляет различные уровни гибкости и контроля для разработчиков, работающих с данными электронной почты. Вот обзор каждого типа:

Стандартные свойства

Определенные спецификацией MAPI, они имеют предопределенные теги свойств и обычно используются для стандартных атрибутов объектов обмена сообщениями. Например:

  • PR_SUBJECT: Тема сообщения.
  • PR_SENDER_NAME: Имя отправителя.
  • PR_DELIVER_TIME: Дата и время, когда оригинальное сообщение было доставлено.

Именованные свойства

Идентифицируются GUID и строковым именем или целочисленным идентификатором, эти свойства позволяют более конкретную категоризацию и идентификацию, помимо стандартных свойств.

Пользовательские (определяемые пользователем) свойства

Определенные разработчиками, они расширяют функциональность объектов MAPI, позволяя настраивать и обрабатывать данные, специфичные для приложения.

Перечисление всех свойств MAPI

Чтобы перечислить все свойства MAPI в сообщении, мы будем использовать метод MapiMessage.Load для загрузки сообщения и перебора его свойств. Пример кода ниже демонстрирует, как загрузить сообщение MAPI, перебрать его свойства и напечатать подробную информацию о каждом свойстве с использованием Aspose.Email для .NET:

  1. Загрузите файл сообщения MAPI с указанного пути.
  2. Переберите коллекцию msg.Properties.Values, чтобы получить доступ к каждому свойству.
  3. Для каждого свойства MAPI напечатайте его тег, каноническое имя и тип данных:
    • Tag предоставляет уникальный идентификатор для свойства MAPI.
    • Descriptor.CanonicalName дает человекочитаемое имя свойства.
    • Descriptor.DataType указывает тип данных свойства.
// Load the email message from a file
var msg = MapiMessage.Load(@"D:\Aspose\Files\msg\test.msg");
// Iterate through all MAPI properties and print their details
foreach (var mapiProperty in msg.Properties.Values)
{
Console.WriteLine($"Tag: {mapiProperty.Tag}");
Console.WriteLine($"Canonical Name: {mapiProperty.Descriptor.CanonicalName}");
Console.WriteLine($"Data Type: {mapiProperty.Descriptor.DataType}");
}

Перечисление именованных свойств MAPI

В то время как обычные свойства MAPI идентифицируются 16-битным тегом свойства, состоящим из типа свойства и идентификатора свойства, именованные свойства идентифицируются комбинацией GUID и либо строкового имени, либо целочисленного идентификатора:

  • GUID (Глобальный уникальный идентификатор): Уникальный идентификатор, который обеспечивает уникальность набора свойств. Этот GUID обычно предоставляется разработчиком.
  • Имя или ID:
    • Строковое имя (чувствительно к регистру).
    • 32-битный целочисленный идентификатор.

Следующий фрагмент кода демонстрирует, как использовать Aspose.Email для .NET для перебора именованных свойств MAPI сообщения и печати подробной информации в зависимости от типа дескриптора свойства:

  1. Переберите каждое именованное свойство, получая доступ к коллекции ‘NamedProperties.Values’ загруженного объекта MapiMessage, чтобы получить все именованные свойства MAPI.
  2. Проверьте, является ли дескриптор текущего именованного свойства типом PidNamePropertyDescriptor. Если да, приведите дескриптор к PidNamePropertyDescriptor. Напечатайте GUID, каноническое имя и тип данных свойства.
  3. Проверьте, является ли дескриптор текущего именованного свойства типом PidLidPropertyDescriptor. Если да, приведите дескриптор к PidLidPropertyDescriptor. Напечатайте GUID, каноническое имя, длинный ID и тип данных свойства.
foreach (MapiNamedProperty mapiNamedProperty in msg.NamedProperties.Values)
{
if (mapiNamedProperty.Descriptor is PidNamePropertyDescriptor pidNamePropertyDescriptor)
{
Console.WriteLine($"GUID: {pidNamePropertyDescriptor.PropertySet}");
Console.WriteLine($"Canonical Name: {pidNamePropertyDescriptor.CanonicalName}");
Console.WriteLine($"Data Type: {pidNamePropertyDescriptor.DataType}");
}
if (mapiNamedProperty.Descriptor is PidLidPropertyDescriptor pidLidPropertyDescriptor)
{
Console.WriteLine($"GUID: {pidLidPropertyDescriptor.PropertySet}");
Console.WriteLine($"Canonical Name: {pidLidPropertyDescriptor.CanonicalName}");
Console.WriteLine($"Long ID: {pidLidPropertyDescriptor.LongId}");
Console.WriteLine($"Data Type: {pidLidPropertyDescriptor.DataType}");
}
}

Таким образом, мы напечатали конкретные атрибуты, такие как PropertySet, CanonicalName, DataType и LongId, в зависимости от типа дескриптора (PidNamePropertyDescriptor или PidLidPropertyDescriptor).

Получение свойств по дескриптору

Получение свойств по дескриптору — это простой способ доступа к конкретным свойствам MAPI без перебора всей коллекции свойств. Aspose.Email для .NET предоставляет удобный способ получения свойств с использованием KnownPropertyList. Пример кода ниже демонстрирует, как получить и напечатать детали конкретного свойства, такого как InternetMessageId, если оно существует.

  1. Получите свойство InternetMessageId из коллекции Properties объекта MapiMessage с помощью KnownPropertyList.
  2. Убедитесь, что свойство не равно null, чтобы гарантировать, что оно существует в сообщении.
  3. Напечатайте детали полученного свойства: тег, каноническое имя и тип данных.
  4. Если тип данных свойства строковый, используйте метод GetString, чтобы получить значение свойства и напечатать его.
// Retrieve and print the InternetMessageId property if it exists
if (msg.Properties[KnownPropertyList.InternetMessageId] != null)
{
var property = msg.Properties[KnownPropertyList.InternetMessageId];
Console.WriteLine($"Tag: {property.Tag}");
Console.WriteLine($"Canonical Name: {property.Descriptor.CanonicalName}");
Console.WriteLine($"Data Type: {property.Descriptor.DataType}");
// Retrieve and print the property value if it is a string
if (property.Descriptor.DataType == PropertyDataType.String)
{
var propertyValue = property.GetString();
Console.WriteLine($"Value: {propertyValue}");
}
}

Получение свойств по тегу

Тег свойства — это 32-битный идентификатор, который уникально идентифицирует свойство MAPI. Он состоит из идентификатора свойства и типа свойства. Используя теги свойств, вы можете напрямую получить доступ к конкретным свойствам в сообщении MAPI. Пример кода ниже демонстрирует, как получить и напечатать детали конкретного свойства, такого как PR_HASATTACH, если оно существует.

  1. Используйте MapiPropertyTag, чтобы напрямую получить свойство PR_HASATTACH из коллекции Properties объекта MapiMessage.
  2. Убедитесь, что свойство не равно null, чтобы гарантировать, что оно существует в сообщении.
  3. Напечатайте детали полученного свойства: тег и тип данных.
  4. Если тип данных свойства логический, используйте метод GetBoolean, чтобы получить значение свойства и напечатать, имеет ли сообщение вложения.
// Retrieve and print the PR_HASATTACH property if it exists
if (msg.Properties[MapiPropertyTag.PR_HASATTACH] != null)
{
var property = msg.Properties[MapiPropertyTag.PR_HASATTACH];
Console.WriteLine($"Tag: {property.Tag}");
Console.WriteLine($"Data Type: {property.DataType}");
// Retrieve and print the property value if it is a boolean
if (property.DataType == (int)MapiPropertyType.PT_BOOLEAN)
{
var propertyValue = property.GetBoolean();
Console.WriteLine($"Has Attachments: {propertyValue}");
}
}

Использование метода GetProperty

Метод GetProperty упрощает процесс получения как обычных, так и именованных свойств из сообщения MAPI. Этот метод позволяет вам напрямую получить доступ к свойству по его дескриптору или тегу без необходимости вручную проверять коллекцию свойств. Пример кода ниже демонстрирует, как использовать метод GetProperty для доступа к конкретным свойствам MAPI:

  1. Используйте метод GetProperty, чтобы напрямую получить свойство CurrentVersionName из класса KnownPropertyList.
  2. Убедитесь, что свойство не равно null, чтобы гарантировать, что оно существует в сообщении.
  3. Используйте метод GetString, чтобы получить значение свойства и напечатать его.
// Retrieve and print the CurrentVersionName property
var namedProperty = msg.GetProperty(KnownPropertyList.CurrentVersionName);
if (namedProperty != null)
{
Console.WriteLine($"Current Version Name: {namedProperty.GetString()}");
}
view raw GetProperty.cs hosted with ❤ by GitHub

Здесь GetProperty используется для прямого доступа к свойству CurrentVersionName.

Работа с пользовательскими свойствами

Пользовательские свойства MAPI — это дополнительные свойства, не входящие в предопределенный набор свойств MAPI. Они создаются для хранения данных, специфичных для приложения, и определяются разработчиком. Позволяя разработчикам определять и использовать дополнительные свойства, MAPI предоставляет гибкий и мощный способ хранения и управления пользовательскими данными в приложениях обмена сообщениями. Пользовательские свойства — это именованные свойства (используется GUID и строковое имя). Aspose.Email предлагает подход, который вы можете использовать для извлечения всех пользовательских свойств, определенных в сообщении. Это достигается с помощью метода GetCustomProperties. Пример кода ниже демонстрирует, как извлекать и печатать все пользовательские свойства, определенные в сообщении MAPI:

  1. Используйте метод GetCustomProperties, чтобы получить коллекцию всех пользовательских свойств, определенных в сообщении.
  2. Переберите каждое пользовательское свойство в полученной коллекции.
  3. Напечатайте детали свойства: тег, каноническое имя и тип данных.
// Retrieve and print custom properties
var customProperties = msg.GetCustomProperties();
foreach (var customProperty in customProperties)
{
Console.WriteLine($"Tag: {customProperty.Tag}");
Console.WriteLine($"Canonical Name: {customProperty.Descriptor.CanonicalName}");
Console.WriteLine($"Data Type: {customProperty.Descriptor.DataType}");
}

Заключение

В этой статье были рассмотрены различные методы доступа, перечисления и манипулирования свойствами MAPI с использованием Aspose.Email для .NET. Aspose.Email предоставляет всестороннюю поддержку для обработки этих свойств, позволяя разработчикам управлять и манипулировать данными электронной почты с детальным контролем. Используя эту библиотеку, разработчики могут создавать сложные решения для управления и обработки электронной почты, облегчая работу с стандартными, именованными и пользовательскими свойствами.

Кроме того, Aspose.Email предоставляет подробную документацию, обширную справочную информацию по API и различные бесплатные онлайн-инструменты и приложения для улучшения вашего процесса разработки. Разработчики также могут получить доступ к бесплатному форуму поддержки для помощи и советов от сообщества и оставаться в курсе последних советов и руководств через блог Aspose. Эти ресурсы являются неоценимыми для максимизации потенциала библиотеки в ваших проектах.

Смотрите также