Gestionar archivos de mensaje con Aspose.Email.Outlook
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
pst = ae.storage.pst.PersonalStorage.from_file("test.pst")
folder = pst.root_folder.get_sub_folder("Calendar")
for messageInfo in folder.enumerate_messages():
msg = pst.extract_message(messageInfo)
# Get the class type based on msg.SupportedType
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 = 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 = 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 = 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 = 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 = 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 = msg.to_mapi_message_item()
# You can access to MapiTask properties there
Conversión de MSG a mensaje MIME
La API de Aspose.Email permite convertir un archivo MSG a un mensaje MIME usando el método ToMailMessage.
Establecer tiempo de espera para la conversión y carga de un mensaje
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.
Procesamiento de archivos de plantilla Outlook (OFT)
Cargar, modificar y guardar un archivo OFT
Las plantillas Outlook (OFT) ofrecen una forma conveniente de simplificar el proceso de envío de correos electrónicos repetitivos. En lugar de redactar el mismo correo desde cero cada vez, puede crear un mensaje en Outlook y guardarlo como Plantilla Outlook (OFT). Más adelante, cuando necesite enviar un mensaje similar, puede generarlo rápidamente desde la plantilla. Este enfoque le ahorra el esfuerzo de volver a escribir el mismo contenido en el cuerpo del mensaje, especificar la línea de asunto, el formato, etc.
de Aspose.Email MailMessage clase proporciona una herramienta potente para cargar y manipular archivos de plantilla Outlook (OFT). Una vez que una plantilla Outlook se carga en una instancia de la clase MailMessage, puede actualizar fácilmente propiedades como remitente, destinatario, cuerpo del mensaje, asunto y varios otros atributos.
import aspose.email as ae
# Load the OFT file
oft_file_path = "your_template.oft"
mail_message = ae.MailMessage.load(oft_file_path)
# Update properties as needed
mail_message.subject = "Updated Subject"
mail_message.body = "Updated body text."
# Save the updated message as an MSG file
msg_file_path = "updated_message.msg"
mail_message.save(msg_file_path, ae.MailMessageSaveType.outlook_message_format_unicode)
print(f"Updated message saved to {msg_file_path}")
Después de realizar las actualizaciones necesarias, puede enviar el correo electrónico usando el SmtpClient clase:
# Send the email
smtpClient.send(message)
Guardando archivo MSG de Outlook como Plantilla
Para este propósito, puede usar el MailMessage clase para crear un correo electrónico y luego guardarlo como archivo OFT. El siguiente ejemplo de código le mostrará cómo guardar un correo como Plantilla de Outlook:
import aspose.email as ae
# Create a new MailMessage
message = ae.MailMessage()
message.subject = "Sample Outlook Template"
message.html_body = "<html><body>This is the body of the email.</body></html>"
message.from_address = ae.MailAddress("your.email@example.com", "Your Name")
# Save the MailMessage as an Outlook Template (OFT) file
oft_file_path = "sample_template.oft"
message.save(oft_file_path, ae.SaveOptions.default_oft)
print(f"Outlook Template saved as {oft_file_path}")
OFT o MSG: Determinar el tipo de un MapiMessage
El siguiente fragmento de código ilustra cómo determinar si un mensaje MAPI cargado representa un correo electrónico estándar o una Plantilla de Outlook (OFT):
msg = ae.mapi.MapiMessage.Load("message.msg");
isOft = msg.is_template # returns false
msg = ae.mapi.MapiMessage.Load("message.oft");
isOft = msg.IsTemplate; # returns true
Después de cargar el archivo MSG, el código verifica si la propiedad is_template del MapiMessaage la clase es True o False. En caso de que devuelva false, el mensaje cargado es un mensaje de correo electrónico estándar, no una plantilla de Outlook; de lo contrario, si devuelve true, el mensaje no es un correo electrónico estándar, es una plantilla de Outlook.
Guardar MapiMessage o MailMessage como OFT
El SaveOptions es una clase base abstracta para clases que permiten al usuario especificar opciones adicionales al guardar un MailMessage en un formato específico. El siguiente ejemplo de código muestra cómo guardar un mensaje en formato OFT:
import aspose.email as ae
# Save the MailMessage to OFT format
eml = ae.MailMessage.load("message.eml")
eml.save("message.oft", ae.SaveOptions.default_oft)
# or alternative way 2
save_options = ae.MsgSaveOptions(ae.MailMessageSaveType.outlook_template_format)
eml.save("message.oft", save_options)
# or alternative way 3
save_options = ae.SaveOptions.create_save_options(ae.MailMessageSaveType.outlook_template_format)
eml.save("message.oft", save_options)
# Save the MapiMessage to OFT format
msg = ae.mapi.MapiMessage.load("message.msg")
msg.save("message.oft", ae.SaveOptions.default_oft)
# or alternative way 2
save_options = ae.MsgSaveOptions(ae.MailMessageSaveType.outlook_template_format)
msg.save("message.oft", save_options)
# or alternative way 3
save_options = ae.SaveOptions.create_save_options(ae.MailMessageSaveType.outlook_template_format)
msg.save("message.oft", save_options)
Gestionar mensajes con firmas digitales
La biblioteca proporciona el LoadOptions clase, una clase base abstracta para clases que permiten al usuario especificar opciones adicionales al cargar un MailMessage desde un formato específico. La opción de preservar la firma está activada por defecto.
Convertir de EML a MSG preservando la firma
El ejemplo de código a continuación muestra cómo cargar un mensaje, convertirlo al formato MSG y guardarlo como MSG (la firma se preserva por defecto):
import aspose.email as ae
# Load mail message
loadOptions = ae.EmlLoadOptions()
message = ae.MailMessage.load("Message.eml", loadOptions)
# Save as MSG
message.save("ConvertEMLToMSG_out.msg", ae.SaveOptions.default_msg_unicode)
Convertir mensajes S/MIME de MSG a EML
Aspose.Email le permite convertir de MSG a EML preservando una firma digital como se muestra en el siguiente fragmento de código.
import aspose.email as ae
# Load mail message
loadOptions = ae.EmlLoadOptions()
smime_eml = ae.MailMessage.load("smime.eml", loadOptions)
conversion_options = ae.mapi.MapiConversionOptions(ae.mapi.OutlookMessageFormat.UNICODE)
msg = ae.mapi.MapiMessage.from_mail_message(smime_eml, conversion_options)
# Save File to disk
msg.save("ConvertMIMEMessagesFromMSGToEML_out.msg")
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)
Acceder a la información de seguimiento desde un archivo MSG
Extraer Información de Recibo de Lectura y Entrega
El siguiente ejemplo de código muestra cómo extraer la información del destinatario y su estado de seguimiento de un mensaje Outlook (MSG):
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("received.msg")
for recipient in msg.recipients:
print(f"Recipient: {recipient.display_name}")
print(f"Delivery time: {recipient.properties[ae.mapi.MapiPropertyTag.RECIPIENT_TRACKSTATUS_TIME_DELIVERY]}")
print(f"Read time: {recipient.properties[ae.mapi.MapiPropertyTag.RECIPIENT_TRACKSTATUS_TIME_READ]}")
Crear mensajes de reenvío y respuesta
Aspose.Email proporciona formas sencillas de crear mensajes de reenvío y respuesta basados en los existentes.
Crear un mensaje de reenvío
Puede usar el ForwardMessageBuilder Clase para crear un mensaje de reenvío configurando el mensaje fuente, remitente, destinatarios, asunto y cuerpo. Los mensajes de reenvío pueden incluir el mensaje original como adjunto o como cuerpo del mensaje reenviado. Tiene la flexibilidad de personalizar propiedades adicionales como adjuntos, encabezados y opciones de formato. El siguiente ejemplo de código muestra cómo crear un mensaje de reenvío:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("original.msg")
builder = ae.tools.ForwardMessageBuilder()
builder.addition_mode = ae.tools.OriginalMessageAdditionMode.TEXTPART
forwardMsg = builder.build_response(msg)
forwardMsg.save("forward_out.msg")
Crear un mensaje de respuesta
El ReplyMessageBuilder La clase se usa para configurar los ajustes de respuesta, incluyendo el mensaje fuente, remitente, destinatarios, modo de respuesta, prefijo del asunto y el cuerpo del mensaje de respuesta. Los mensajes de respuesta pueden crearse en diferentes modos como "Responder al remitente" o "Responder a todos" según su necesidad. Puede personalizar varias propiedades como adjuntos, encabezados y opciones de formato para el mensaje de respuesta. El siguiente ejemplo de código muestra cómo crear un mensaje de reenvío:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("original.msg")
builder = ae.tools.ReplyMessageBuilder()
# Set ReplyMessageBuilder Properties
builder.reply_all = True
builder.addition_mode = ae.tools.OriginalMessageAdditionMode.TEXTPART
builder.response_text = "<p><b>Dear Friend,</b></p> I want to do is introduce my co-author and co-teacher. <p><a href=\"www.google.com\">This is a first link</a></p><p><a href=\"www.google.com\">This is a second link</a></p>";
replyMsg = builder.build_response(msg)
replyMsg.save("reply_out.msg")