
- Categorías de propiedades MAPI
- Listar todas las propiedades MAPI
- Listar propiedades MAPI nombradas
- Recuperar propiedades por descriptor
- Recuperar propiedades por etiqueta
- Usar el método GetProperty
- Trabajar con propiedades personalizadas
Gestionar datos de correo electrónico programáticamente puede ser complejo, particularmente al tratar con las propiedades de la Interfaz de Programación de Aplicaciones de Mensajería (MAPI). Estas propiedades son atributos o metadatos asociados con objetos MAPI como mensajes, carpetas, destinatarios y otros componentes en un sistema de mensajería. Estas propiedades proporcionan información detallada sobre el objeto, como el asunto de un correo electrónico, la dirección del remitente, la fecha en que se envió un correo electrónico y más. Las propiedades MAPI se utilizan extensivamente en clientes de correo electrónico y otras aplicaciones de mensajería para gestionar y manipular datos de correo electrónico. Este artículo profundiza en varias técnicas para acceder, enumerar y manipular propiedades MAPI utilizando Aspose.Email para .NET.
API de .NET para gestionar propiedades MAPI en C#
Aspose.Email para .NET proporciona un soporte completo para manejar propiedades de la Interfaz de Programación de Aplicaciones de Mensajería, permitiendo a los desarrolladores gestionar y manipular datos de correo electrónico con un control detallado. También es una API extensa que permite a los desarrolladores equipar sus aplicaciones de correo electrónico con características robustas para el procesamiento de mensajes y otras tareas relacionadas.
Usando Aspose.Email para .NET, los desarrolladores pueden crear soluciones sofisticadas de gestión y procesamiento de correo electrónico. Para comenzar a utilizar la biblioteca, puede descargar desde el sitio web de Aspose o NuGet e integrarla en su proyecto.
Categorías de propiedades MAPI
Asegúrese de tener Aspose.Email en su proyecto y comencemos. Las propiedades MAPI se pueden categorizar en tres tipos principales: propiedades estándar, propiedades nombradas y propiedades personalizadas (definidas por el usuario). Cada categoría sirve a un propósito diferente y proporciona diferentes niveles de flexibilidad y control para los desarrolladores que trabajan con datos de correo electrónico. Aquí hay un resumen de cada tipo:
Propiedades estándar
Definidas por la especificación MAPI, tienen etiquetas de propiedad predefinidas y se utilizan comúnmente para atributos estándar de objetos de mensajería. Por ejemplo:
- PR_SUBJECT: El asunto del mensaje.
- PR_SENDER_NAME: El nombre del remitente.
- PR_DELIVER_TIME: La fecha y hora en que se entregó el mensaje original.
Propiedades nombradas
Identificadas por un GUID y un nombre de cadena o un identificador entero, estas propiedades permiten una categorización e identificación más específica más allá de las propiedades estándar.
Propiedades personalizadas (definidas por el usuario)
Definidas por los desarrolladores, extienden la funcionalidad de los objetos MAPI, permitiendo un manejo de datos personalizado y específico de la aplicación.
Listar todas las propiedades MAPI
Para listar todas las propiedades MAPI en un mensaje, vamos a usar el método MapiMessage.Load para cargar el mensaje e iterar sobre sus propiedades. El siguiente ejemplo de código demuestra cómo cargar un mensaje MAPI, iterar a través de sus propiedades e imprimir información detallada sobre cada propiedad usando Aspose.Email para .NET:
- Cargue el archivo de mensaje MAPI desde la ruta especificada.
- Itere sobre la colección
msg.Properties.Values
para acceder a cada propiedad. - Para cada propiedad MAPI, imprima su etiqueta, nombre canónico y tipo de datos:
- La propiedad Tag proporciona el identificador único para la propiedad MAPI.
- La propiedad Descriptor.CanonicalName proporciona el nombre legible por humanos de la propiedad.
- La propiedad Descriptor.DataType indica el tipo de dato de la propiedad.
// 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}"); | |
} |
Listar propiedades MAPI nombradas
Mientras que las propiedades MAPI regulares son identificadas por una etiqueta de propiedad de 16 bits que consiste en un tipo de propiedad y un identificador de propiedad, las propiedades nombradas son identificadas por una combinación de un GUID y ya sea un nombre de cadena o un identificador entero:
- GUID (Identificador Único Global): Un identificador único que asegura que el conjunto de propiedades sea único. Este GUID es generalmente proporcionado por el desarrollador.
- Nombre o ID:
- Un nombre de cadena (sensible a mayúsculas).
- Un identificador entero de 32 bits.
El siguiente fragmento de código demuestra cómo usar Aspose.Email para .NET para iterar a través de las propiedades MAPI nombradas de un mensaje e imprimir información detallada basada en el tipo de descriptor de la propiedad:
- Itere a través de cada propiedad nombrada accediendo a la colección ‘NamedProperties.Values’ del objeto MapiMessage cargado para obtener todas las propiedades MAPI nombradas.
- Verifique si el Descriptor de la propiedad nombrada actual es de tipo PidNamePropertyDescriptor. Si es así, convierta el Descriptor a PidNamePropertyDescriptor. Imprima el GUID, el Nombre Canónico y el Tipo de Datos de la propiedad.
- Verifique si el Descriptor de la propiedad nombrada actual es de tipo PidLidPropertyDescriptor. Si es así, convierta el Descriptor a PidLidPropertyDescriptor. Imprima el GUID, el Nombre Canónico, el ID Largo y el Tipo de Datos de la propiedad.
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}"); | |
} | |
} |
Así, hemos impreso atributos específicos como PropertySet
, CanonicalName
, DataType
y LongId
dependiendo del tipo de descriptor (PidNamePropertyDescriptor
o PidLidPropertyDescriptor
).
Recuperar propiedades por descriptor
Recuperar propiedades por descriptor es una forma sencilla de acceder a propiedades MAPI específicas sin iterar a través de toda la colección de propiedades. Aspose.Email para .NET proporciona una forma conveniente de recuperar propiedades usando la KnownPropertyList. El siguiente ejemplo de código demuestra cómo recuperar e imprimir los detalles de una propiedad específica, como el InternetMessageId, si existe.
- Acceda a la propiedad InternetMessageId de la colección de propiedades del objeto MapiMessage usando la KnownPropertyList.
- Verifique que la propiedad no sea nula para asegurarse de que existe en el mensaje.
- Imprima los detalles de la propiedad recuperada: Etiqueta, Nombre Canónico y Tipo de Datos.
- Si el tipo de dato de la propiedad es una cadena, use el método GetString para recuperar el valor de la propiedad e imprimirlo.
// 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}"); | |
} | |
} |
Recuperar propiedades por etiqueta
Una etiqueta de propiedad es un identificador de 32 bits que identifica de manera única una propiedad MAPI. Consiste en un ID de propiedad y un tipo de propiedad. Usando etiquetas de propiedad, puede acceder directamente a propiedades específicas dentro de un mensaje MAPI. El siguiente ejemplo de código demuestra cómo recuperar e imprimir los detalles de una propiedad específica, como PR_HASATTACH, si existe.
- Use el MapiPropertyTag para acceder directamente a la propiedad PR_HASATTACH de la colección de propiedades del objeto MapiMessage.
- Verifique que la propiedad no sea nula para asegurarse de que existe en el mensaje.
- Imprima los detalles de la propiedad recuperada: Etiqueta y Tipo de Datos.
- Si el tipo de dato de la propiedad es booleano, use el método GetBoolean para recuperar el valor de la propiedad e imprimir si el mensaje tiene archivos adjuntos.
// 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}"); | |
} | |
} |
Usar el método GetProperty
El método GetProperty simplifica el proceso de recuperación tanto de propiedades regulares como nombradas de un mensaje MAPI. Este método le permite acceder directamente a una propiedad por su descriptor o etiqueta sin verificar manualmente la colección de propiedades. El siguiente ejemplo de código demuestra cómo utilizar el método GetProperty para acceder a propiedades MAPI específicas:
- Use el método GetProperty para acceder directamente a la propiedad CurrentVersionName de la clase KnownPropertyList.
- Verifique que la propiedad no sea nula para asegurarse de que existe en el mensaje.
- Use el método GetString para recuperar el valor de la propiedad e imprimirlo.
// Retrieve and print the CurrentVersionName property | |
var namedProperty = msg.GetProperty(KnownPropertyList.CurrentVersionName); | |
if (namedProperty != null) | |
{ | |
Console.WriteLine($"Current Version Name: {namedProperty.GetString()}"); | |
} |
Aquí, GetProperty
se usa para acceder directamente a la propiedad CurrentVersionName
.
Trabajar con propiedades personalizadas
Las propiedades MAPI personalizadas son propiedades adicionales que no forman parte del conjunto predefinido de propiedades MAPI. Se crean para contener datos específicos de la aplicación y son definidas por el desarrollador. Al permitir a los desarrolladores definir y usar propiedades adicionales, MAPI proporciona una forma flexible y poderosa de almacenar y gestionar datos personalizados dentro de aplicaciones de mensajería. Las propiedades personalizadas son propiedades nombradas (que utilizan un GUID y un nombre de cadena). Aspose.Email introduce un enfoque que puede utilizar para obtener todas las propiedades personalizadas definidas en el mensaje. Esto se logra con el método GetCustomProperties. El siguiente ejemplo de código demuestra cómo obtener e imprimir todas las propiedades personalizadas definidas en un mensaje MAPI:
- Use el método GetCustomProperties para obtener una colección de todas las propiedades personalizadas definidas en el mensaje.
- Itere a través de cada propiedad personalizada en la colección recuperada.
- Imprima los detalles de la propiedad: Etiqueta, Nombre Canónico y Tipo de Datos.
// 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}"); | |
} |
Conclusión
Este artículo ha explorado varias técnicas para acceder, enumerar y manipular propiedades MAPI utilizando Aspose.Email para .NET. Aspose.Email proporciona un soporte completo para manejar estas propiedades, permitiendo a los desarrolladores gestionar y manipular datos de correo electrónico con un control detallado. Al utilizar esta biblioteca, los desarrolladores pueden crear soluciones sofisticadas de gestión y procesamiento de correo electrónico, facilitando el trabajo con propiedades estándar, nombradas y personalizadas.
Además, Aspose.Email proporciona una documentación completa, una extensa referencia de API y una variedad de herramientas y aplicaciones gratuitas en línea para mejorar su proceso de desarrollo. Los desarrolladores también pueden acceder a un foro de soporte gratuito para asistencia y opiniones de la comunidad, y mantenerse actualizados con los últimos consejos y tutoriales a través del blog de Aspose. Estos recursos son invaluables para maximizar el potencial de la biblioteca en sus proyectos.