Gestión de Adjuntos en Mensajes Outlook
El Creación y Guardado de Archivos de Mensaje Outlook (MSG) el artículo explicó los pasos involucrados en crear y guardar mensajes, incluidos los archivos MSG con adjuntos. Este artículo profundiza en la gestión de adjuntos de Microsoft Outlook usando Aspose.Email. Le guiará a través del acceso y guardado de adjuntos de un archivo de mensaje utilizando el attachments propiedad del MapiMessage clase. Esta propiedad es una colección que pertenece al MapiAttachmentCollection clase, que permite una gestión eficiente de los adjuntos.
Verificar Adjuntos Inline vs Regular
"Adjuntos ‘Inline’ y ‘Regular’ se refieren a la forma en que se incluyen en un mensaje de correo electrónico. Los adjuntos Regular son archivos adjuntos de manera tradicional. Normalmente se muestran en una lista dentro del cliente de correo y pueden ser descargados por el destinatario y guardados en almacenamiento local. Los adjuntos Inline, también conocidos como imágenes incrustadas o inline, se usan típicamente para incluir imágenes u otros medios dentro del cuerpo del correo. No se muestran en una lista separada sino directamente dentro del contenido del correo, por ejemplo en el cuerpo del mensaje. Esto permite incluir imágenes u otros medios que forman parte del contenido del mensaje. El siguiente ejemplo de código muestra cómo determinar si un adjunto es inline o regular:**
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("message.msg")
for attachment in msg.attachments:
print(f"{attachment.display_name}:{attachment.is_inline}")
Identificar Adjuntos de Referencia en Mensajes MAPI
La API Aspose.Email incluye el is_reference propiedad del MapiAttachment clase que permite a los desarrolladores identificar adjuntos de referencia en un mensaje. Pruebe el siguiente ejemplo de código para ver cómo funciona en un proyecto python:
import aspose.email as ae
# Load or create a MapiMessage
msg = ae.mapi.MapiMessage.load("Message_With_Reference_Attachment.msg")
# Iterate through the attachments
for attachment in msg.attachments:
if attachment.is_reference:
# Process reference attachment
pass
Guardar Adjuntos de Archivos MSG
Para guardar adjuntos de un archivo MSG:
- Iterar a través de MapiAttachmentCollection colección y obtenga los adjuntos individuales.
- Para guardar los adjuntos, llame al MapiAttachment clase Save() método.
El siguiente fragmento de código le muestra cómo guardar adjuntos en el disco local:
import aspose.email as ae
data_dir = "C://dataDir/"
file_name = "message.msg"
# Create an instance of MapiMessage from file
message = ae.mapi.MapiMessage.load(data_dir + file_name)
# Iterate through the attachments collection
for attachment in message.attachments:
# Save the individual attachment
attachment.save(data_dir + attachment.file_name)
Manejo de Adjuntos TNEF
Cargar y Guardar Adjuntos en Formato TNEF
Aspose.Email proporciona métodos para manejar adjuntos TNEF. Estos métodos permiten guardar y cargar adjuntos en formato TNEF, comúnmente usado en mensajes Outlook (winmail.dat).
- static MapiAttachment MapiAttachment.load_from_tnef(string fileName) – Carga un adjunto desde un archivo TNEF.
- static MapiAttachment MapiAttachment.load_from_tnef(Stream stream) – Carga un adjunto desde un flujo TNEF.
- void MapiAttachment.save_to_tnef(string filename) – Guarda un adjunto en un archivo TNEF.
- void MapiAttachment.save_to_tnef(Stream stream) – Guarda un adjunto en un flujo TNEF.
El siguiente ejemplo de código demuestra cómo extraer, guardar y volver a agregar adjuntos de correo en formato TNEF mientras se gestionan mediante flujos de memoria o archivos:
import io
from aspose.email.mapi import MapiMessage, MapiAttachment
# Load the EML message (which contains a winmail.dat TNEF attachment)
msg = MapiMessage.load("message.eml")
# Save the first attachment as a winmail.dat file
msg.attachments[0].save_to_tnef("winmail.dat")
# Load the TNEF attachment from the file and add it back to the message
from_tnef_attachment = MapiAttachment.load_from_tnef("winmail.dat")
msg.attachments.add(from_tnef_attachment.long_file_name, from_tnef_attachment.binary_data)
# (Optional) If you also want to use a memory stream instead of the file
ms = io.BytesIO()
msg.attachments[0].save_to_tnef(ms)
# Reset the stream position to the beginning
ms.seek(0)
# Load the TNEF attachment directly from the memory stream and add it
from_tnef_attachment_from_stream = MapiAttachment.load_from_tnef(ms)
msg.attachments.add(from_tnef_attachment_from_stream.long_file_name, from_tnef_attachment_from_stream.binary_data)
Recuperar Adjuntos de Mensajes de Correo Anidados
Los adjuntos OLE incrustados (Object Linking and Embedding) también aparecen en la colección de adjuntos del MapiMessage clase. El ejemplo de código a continuación muestra cómo analizar un archivo de mensaje y extraer los adjuntos de mensajes incrustados, guardándolos posteriormente en disco para uso posterior. El MapiMessage clase ofrece un from_properties método estático para crear un nuevo mensaje a partir de un adjunto incrustado. El siguiente fragmento de código le muestra cómo obtener adjuntos de mensajes de correo anidados:
import aspose.email as ae
eml = ae.mapi.MapiMessage.load("my.msg")
# Create a MapiMessage object from the individual attachment
get_attachment = ae.mapi.MapiMessage.from_properties(eml.attachments[0].object_data.properties)
# Create an object of type MailMessageInterpreter from the above message and save the embedded message to a file on disk
mail_message = get_attachment.to_mail_message(ae.mapi.MailConversionOptions())
mail_message.save("NestedMailMessageAttachments_out.eml", ae.SaveOptions.default_eml)
Eliminar Adjuntos
La biblioteca Aspose.Email proporciona la funcionalidad para eliminar adjuntos de archivos Microsoft Outlook Message (.msg). Use el remove_attachments(path) método que requiere la ruta del archivo de mensaje como parámetro. Como método estático público, puede llamarlo directamente sin necesidad de instanciar un objeto, haciendo el proceso directo y eficiente.
El siguiente fragmento de código le muestra cómo eliminar adjuntos de archivos MSG usando Aspose.Email:
import aspose.email as ae
ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")
También puede llamar al método estático destroy_attachments del MapiMessage clase. Funciona más rápido que remove_attachments porque el método remove_attachments analiza el archivo de mensaje.
import aspose.email as ae
# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments("AttachmentsToDestroy_out.msg")
Agregar Adjuntos MSG
Un mensaje Outlook puede contener otros mensajes de Microsoft Outlook como adjuntos, ya sea regulares o incrustados. El MapiAttachmentCollection proporciona miembros sobrecargados del agregar método para crear mensajes Outlook con ambos tipos de adjuntos.
¡Pruébalo!
Agregar o eliminar adjuntos de correo electrónico en línea con la aplicación gratuita Aspose.Email Editor App.
Agregar Adjuntos de Referencia a Mensajes MAPI
Adjunto de referencia normalmente se refiere a un adjunto que contiene una referencia o enlace a un recurso externo en lugar del archivo real. Estas referencias se usan a menudo en correos HTML para enlazar a imágenes o recursos externos alojados en un servidor remoto. En lugar de incrustar el archivo completo, un adjunto de referencia incluye una URL o referencia al contenido externo.
Para agregar un adjunto de referencia a un mensaje MAPI, use el add método del MapiAttachmentCollection class y el ReferenceAttachmentOptions clase para especificar:
-
La URL del contenido (enlace directo al archivo)
-
La URL del proveedor (enlace a la ubicación del archivo o vista UI)
-
El nombre del proveedor de adjuntos (p.ej., "GoogleDrive")
como se muestra en el siguiente ejemplo de código.
import aspose.email as ae
# Load or create a MapiMessage
msg = ae.mapi.MapiMessage()
msg.subject = "Email with Reference Attachment"
msg.body = "This message contains a cloud-based reference attachment."
# Create ReferenceAttachmentOptions
options = ae.mapi.ReferenceAttachmentOptions(
"https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
"https://drive.google.com/drive/my-drive",
"GoogleDrive"
)
# Add the reference attachment to the message
msg.attachments.add("Document.pdf", options)
# Save the message to MSG format
msg.save("Message_With_Reference_Attachment.msg")
Incrustar Mensajes como Adjuntos
El siguiente fragmento de código demuestra cómo incrustar archivos Outlook MSG como adjuntos dentro de otro archivo MSG. Un archivo MSG incrustado incluye una propiedad PR_ATTACH_METHOD con valor 5, lo que indica que es un adjunto de tipo "mensaje".
import aspose.email as ae
# Create a new MapiMessage
message = ae.mapi.MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body")
# Load the attachment message
attach_msg = ae.mapi.MapiMessage.load("Message.msg")
# Add the attachment to the message
message.attachments.add("Weekly report.msg", attach_msg)
# Save the message with the embedded message attachment
message.save("WithEmbeddedMsg_out.msg")
Leer Mensajes Incrustados de Adjuntos
El siguiente fragmento de código le muestra cómo leer mensajes incrustados de los adjuntos.
import aspose.email as ae
file_name = "path/to/file.msg"
# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)
# Check if the first attachment is an Outlook message
if message.attachments[0].object_data.is_outlook_message:
# Get the embedded message as MapiMessage
embedded_message = message.attachments[0].object_data.to_mapi_message()
# Perform further operations with the embedded message
# ...
Insertar y Reemplazar Adjuntos
La API Aspose.Email ofrece la funcionalidad de insertar adjuntos en un índice específico dentro del mensaje padre. Además, permite reemplazar el contenido de un adjunto existente con un adjunto de mensaje diferente. A continuación se presentan fragmentos de código que demuestran cómo realizar la inserción y sustitución de adjuntos.
Insertar Adjuntos en Ubicaciones Específicas
La API Aspose.Email le permite insertar un adjunto MSG en un MSG padre usando el método Insert de la MapiAttachmentCollection. Este método se usa con la firma MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). A continuación se muestra un fragmento de código que ilustra cómo insertar un adjunto en una ubicación específica:
import aspose.email as ae
from io import BytesIO
file_name = "path/to/file.msg"
# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)
# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)
# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)
# Insert the loaded attachment at index 1
message.attachments.insert(1, "new 11", get_data)
Reemplazar Contenido del Adjuntos
Puede usar el replace método para actualizar el contenido de un adjunto incrustado con nuevos datos. Sin embargo, ten en cuenta que este método no puede usarse para insertar un adjunto con PR_ATTACH_NUM = 4 en una colección que solo contiene 2 adjuntos. A continuación se muestra un fragmento de código que demuestra cómo reemplazar el contenido del adjunto:
import aspose.email as ae
from io import BytesIO
file_name = "path/to/file.msg"
# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)
# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)
# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)
# Replace the attachment at index 1 with the loaded attachment
message.attachments.replace(1, "new 1", get_data)
Renombrar Adjuntos en MapiMessages
Con Aspose.Email, puede modificar fácilmente los nombres de visualización de los adjuntos en mensajes de correo cargados desde un archivo. El siguiente ejemplo de código muestra cómo lograr esto:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("message.msg")
msg.attachments[0].display_name = "New display name 1"
msg.attachments[1].display_name = "New display name 2"