Trabajando con propiedades MAPI
Determinar el tipo de elemento MAPI en una carpeta PST
Un archivo PST típicamente contiene varios tipos de datos, como mensajes de correo, eventos de calendario, contactos y más. El MapiItemType La clase de Aspose.Email le permite acceder y categorizar diferentes tipos de elementos MAPI dentro de un archivo PST. El código a continuación demuestra cómo determinar el tipo de un elemento MAPI en una carpeta PST:
import aspose.email as ae
import aspose.pycore as pycore
pst = ae.storage.pst.PersonalStorage.from_file("test.pst")
folder = pst.root_folder.get_sub_folder("Calendar")
for message_info in folder.enumerate_messages():
msg = pst.extract_message(message_info)
# Get the class type based on msg.supported_type
item_type = msg.supported_type
# Non-supported type. It cannot be accessed as appropriate item type.
if item_type == ae.mapi.MapiItemType.NONE:
print("Item type not supported")
# An email message.
elif item_type == ae.mapi.MapiItemType.MESSAGE:
# You can access to MapiMessage properties there.
# A subject for example
print(msg.subject)
# A contact item. Can be accessed as MapiContact.
elif item_type == ae.mapi.MapiItemType.CONTACT:
contact = pycore.cast(ae.mapi.MapiContact, msg.to_mapi_message_item())
# You can access to MapiContact properties there.
# A name_info.display_name for example.
print(contact.name_info.display_name)
# A calendar item. Can be accessed as MapiCalendar.
elif item_type == ae.mapi.MapiItemType.CALENDAR:
calendar = pycore.cast(ae.mapi.MapiCalendar, msg.to_mapi_message_item())
# You can access to MapiCalendar properties there.
# A location for example.
print(calendar.location)
# A distribution list. Can be accessed as MapiDistributionList.
elif item_type == ae.mapi.MapiItemType.DIST_LIST:
dlist = pycore.cast(ae.mapi.MapiDistributionList, msg.to_mapi_message_item())
# You can access to MapiDistributionList properties there
# A Journal entry. Can be accessed as MapiJournal.
elif item_type == ae.mapi.MapiItemType.JOURNAL:
journal = pycore.cast(ae.mapi.MapiJournal, msg.to_mapi_message_item())
# You can access to MapiJournal properties there
# A StickyNote. Can be accessed as MapiNote.
elif item_type == ae.mapi.MapiItemType.NOTE:
note = pycore.cast(ae.mapi.MapiNote, msg.to_mapi_message_item())
# You can access to MapiNote properties there
# A Task item. Can be accessed as MapiTask.
elif item_type == ae.mapi.MapiItemType.TASK:
task = pycore.cast(ae.mapi.MapiTask, msg.to_mapi_message_item())
# You can access to MapiTask properties there
Acceder y gestionar propiedades MAPI
El MapiProperty La clase representa una propiedad MAPI, que contiene:
- Nombre: una cadena que representa el nombre de la propiedad.
- Etiqueta: un entero largo que representa la etiqueta de la propiedad.
- Datos: una matriz de bytes que representa los datos de la propiedad.
Obtener propiedad MAPI usando la etiqueta de propiedad
El siguiente ejemplo de código carga un mensaje MAPI, recupera propiedades clave como el asunto y la página de códigos de Internet, y maneja de forma segura la posible ausencia de estas propiedades. Para obtener propiedades MAPI:
- Cargue el mensaje MAPI desde un archivo usando el load método.
- Utilice el MapiPropertyTag Clase para acceder a propiedades específicas de un mensaje MAPI, como el asunto y la página de códigos de Internet.
- Manejar propiedades ausentes.
from aspose.email.mapi import MapiMessage, MapiPropertyTag
# Load from file
msg = MapiMessage.load("message.msg")
# Access the MapiPropertyTag.PR_SUBJECT property
prop = msg.properties[MapiPropertyTag.SUBJECT]
# If the property is not found, check the MapiPropertyTag.PR_SUBJECT_W (which is a // Unicode peer of the MapiPropertyTag.PR_SUBJECT)
if prop is None:
prop = msg.properties[MapiPropertyTag.SUBJECT_W]
# Cannot found
if prop is None:
print("No property found!")
# Get the property data as string
subject = prop.get_string()
print("Subject:" + subject)
# Read internet code page property
prop = msg.properties[MapiPropertyTag.INTERNET_CPID]
if prop is not None:
print("CodePage:" + str(prop.get_long()))
Establecer propiedades MAPI
El siguiente fragmento de código le muestra cómo establecer propiedades MAPI.
Leer Propiedades MAPI con Nombre
Aspose.Email proporciona un conjunto de API para trabajar con archivos MSG, incluida la extracción de propiedades MAPI con nombre.
Leer Propiedades MAPI con Nombre de Archivos MSG
Para leer propiedades MAPI con nombre, puede usar el named_properties propiedad del MapiMessage clase. El siguiente ejemplo de código muestra cómo cargar un mensaje, recuperar todas las propiedades MAPI con nombre, iterar sobre cada propiedad para comprobar su valor:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("my.msg")
# Get all named MAPI properties
properties = msg.named_properties.values
# Read all properties in foreach loop
for prop in properties:
# Read any specific property
if prop.descriptor.canonical_name == "PidLidSideEffects":
print(f"{prop.descriptor.canonical_name} = {prop}")
if prop.descriptor.canonical_name == "PidLidInternetAccountName":
print(f"{prop.descriptor.canonical_name} = {prop}")
Leer Propiedades MAPI con Nombre de los Adjuntos
Aspose.Email permite recuperar todas las propiedades MAPI con nombre de un adjunto. El siguiente ejemplo de código muestra cómo leer propiedades MAPI con nombre de los adjuntos:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("my.msg")
# Get all named MAPI properties
attach_properties = msg.attachments[0].named_properties.values
# Read all properties in foreach loop
for prop in attach_properties:
# Read any specific property
if prop.descriptor.name == "AttachmentOriginalUrl":
print(f"{prop.descriptor.name} = {prop.get_string()}")
if prop.descriptor.name == "AttachmentWasSavedToCloud":
print(f"{prop.descriptor.name} = {prop.get_boolean()}")
Gestión de Propiedades
Eliminar Propiedades de Archivos MSG y Adjuntos
El siguiente ejemplo de código muestra la creación de un mensaje Outlook MSG con contenido corporal y un archivo de mensaje adjunto. También muestra cómo eliminar una propiedad de adjunto del mensaje creado.
import aspose.email as ae
# create an MSG
msg = ae.mapi.MapiMessage("from@domain.com", "to@domain.com", "subject", "body")
msg.set_body_content("<html><body><h1>This is the body content</h1></body></html>", ae.mapi.BodyContentType.HTML)
# load message and add it to created MSG as attachment
attachment = ae.mapi.MapiMessage.load("attach.msg")
msg.attachments.add("Outlook2 Test subject.msg", attachment)
# count of attachment properties before removal
print(f"Before removal = {msg.attachments[0].properties.count}")
# Delete anyone attachment property
msg.attachments[0].remove_property(923467779)
# count of attachment properties after removal
print(f"After removal = {msg.attachments[0].properties.count}")
Conversión de MSG a Mensaje MIME
La API Aspose.Email proporciona la capacidad de convertir un archivo MSG a un mensaje MIME usando el to_mail_message método.
Establecer Tiempo de Espera para Conversión y Carga de Mensajes
Para limitar el tiempo en milisegundos de la conversión del mensaje (valor predeterminado 3 seg), la propiedad timeout del MailConversionOptions clase se usa.
Así es como puede establecer un tiempo de espera para los procesos de conversión y carga de mensajes:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("my.msg")
options = ae.mapi.MailConversionOptions()
options.timeout = 5000
mailMessage = msg.to_mail_message(options)
Al establecer un tiempo de espera para los procesos de conversión y carga de mensajes, puede controlar el tiempo máximo que se permite que estas operaciones se ejecuten. Después de establecer el tiempo de espera, puede continuar con sus procesos de conversión y carga de mensajes.
Establecer Categoría de Color para Archivos Outlook MSG
A veces puede necesitar diferenciar correos electrónicos de particular importancia y organizarlos visualmente. La biblioteca ofrece una forma de hacerlo asignando un color específico a un elemento de mensaje. Cuando establece una categoría de color para un elemento, le permite identificar y localizar fácilmente los elementos relacionados de un vistazo. Use FollowUpManager clase para establecer la categoría de color de un mensaje como se muestra en el siguiente ejemplo de código:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("my.msg")
# Add Two categories
ae.mapi.FollowUpManager.add_category(msg, "Purple Category")
ae.mapi.FollowUpManager.add_category(msg, "Red Category")
# Retrieve the list of available categories
categories = ae.mapi.FollowUpManager.get_categories(msg)
# Remove the specified category and then Clear all categories
ae.mapi.FollowUpManager.remove_category(msg, "Red Category")
ae.mapi.FollowUpManager.clear_categories(msg)