
- Категории свойств MAPI
- Перечисление всех свойств MAPI
- Перечисление именованных свойств MAPI
- Получение свойств по дескриптору
- Получение свойств по тегу
- Использование метода GetProperty
- Работа с пользовательскими свойствами
Управление данными электронной почты программно может быть сложным, особенно при работе со свойствами интерфейса программирования приложений обмена сообщениями (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:
- Загрузите файл сообщения MAPI с указанного пути.
- Переберите коллекцию
msg.Properties.Values
, чтобы получить доступ к каждому свойству. - Для каждого свойства 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 сообщения и печати подробной информации в зависимости от типа дескриптора свойства:
- Переберите каждое именованное свойство, получая доступ к коллекции ‘NamedProperties.Values’ загруженного объекта MapiMessage, чтобы получить все именованные свойства MAPI.
- Проверьте, является ли дескриптор текущего именованного свойства типом PidNamePropertyDescriptor. Если да, приведите дескриптор к PidNamePropertyDescriptor. Напечатайте GUID, каноническое имя и тип данных свойства.
- Проверьте, является ли дескриптор текущего именованного свойства типом 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, если оно существует.
- Получите свойство InternetMessageId из коллекции Properties объекта MapiMessage с помощью KnownPropertyList.
- Убедитесь, что свойство не равно null, чтобы гарантировать, что оно существует в сообщении.
- Напечатайте детали полученного свойства: тег, каноническое имя и тип данных.
- Если тип данных свойства строковый, используйте метод 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, если оно существует.
- Используйте MapiPropertyTag, чтобы напрямую получить свойство PR_HASATTACH из коллекции Properties объекта MapiMessage.
- Убедитесь, что свойство не равно null, чтобы гарантировать, что оно существует в сообщении.
- Напечатайте детали полученного свойства: тег и тип данных.
- Если тип данных свойства логический, используйте метод 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:
- Используйте метод GetProperty, чтобы напрямую получить свойство CurrentVersionName из класса KnownPropertyList.
- Убедитесь, что свойство не равно null, чтобы гарантировать, что оно существует в сообщении.
- Используйте метод GetString, чтобы получить значение свойства и напечатать его.
// Retrieve and print the CurrentVersionName property | |
var namedProperty = msg.GetProperty(KnownPropertyList.CurrentVersionName); | |
if (namedProperty != null) | |
{ | |
Console.WriteLine($"Current Version Name: {namedProperty.GetString()}"); | |
} |
Здесь GetProperty
используется для прямого доступа к свойству CurrentVersionName
.
Работа с пользовательскими свойствами
Пользовательские свойства MAPI — это дополнительные свойства, не входящие в предопределенный набор свойств MAPI. Они создаются для хранения данных, специфичных для приложения, и определяются разработчиком. Позволяя разработчикам определять и использовать дополнительные свойства, MAPI предоставляет гибкий и мощный способ хранения и управления пользовательскими данными в приложениях обмена сообщениями. Пользовательские свойства — это именованные свойства (используется GUID и строковое имя). Aspose.Email предлагает подход, который вы можете использовать для извлечения всех пользовательских свойств, определенных в сообщении. Это достигается с помощью метода GetCustomProperties. Пример кода ниже демонстрирует, как извлекать и печатать все пользовательские свойства, определенные в сообщении MAPI:
- Используйте метод GetCustomProperties, чтобы получить коллекцию всех пользовательских свойств, определенных в сообщении.
- Переберите каждое пользовательское свойство в полученной коллекции.
- Напечатайте детали свойства: тег, каноническое имя и тип данных.
// 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. Эти ресурсы являются неоценимыми для максимизации потенциала библиотеки в ваших проектах.