Lavorare con gli allegati del messaggio
Gestire gli allegati con Aspose Outlook
Creare e salvare file Outlook Message (MSG) spiega come creare e salvare messaggi, e come creare file MSG con allegati. Questo articolo illustra come gestire gli allegati di Microsoft Outlook con Aspose.Email. Gli allegati da un file di messaggio vengono acceduti e salvati su disco usando la proprietà Attachments della classe MapiMessage. La proprietà Attachments è una collezione del tipo classe MapiAttachmentCollection.
Verificare se l’allegato è inline o regolare
"Inline" e "Regular" si riferiscono al modo in cui sono inclusi in un messaggio email. Gli allegati Regular sono file allegati nel modo tradizionale. Solitamente vengono visualizzati in un elenco all’interno del client email e possono essere scaricati dal destinatario e salvati in una memoria locale. Gli allegati Inline, noti anche come immagini incorporate o inline, vengono solitamente utilizzati per includere immagini o altri media nel corpo dell’email. Non sono visualizzati in un elenco separato ma mostrati direttamente nel contenuto dell’email, ad esempio nel corpo del messaggio. Ciò consente di includere immagini o altri media che fanno parte del contenuto del messaggio. Il seguente esempio di codice dimostra come determinare se un allegato è 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}")
Salvare gli allegati da un file Outlook Message (MSG)
Per salvare gli allegati da un file MSG:
- Itera attraverso la collezione MapiAttachmentCollection e ottieni gli allegati individuali.
- Per salvare gli allegati, chiama il metodo Save() della classe MapiAttachment.
Il seguente frammento di codice mostra come salvare gli allegati sul disco locale.
import aspose.email as ae
data_dir = "C://dataDir/"
file_name = "message.msg"
# Create an instance of MapiMessage from file
message = ae.mapi.MapiMessage.from_file(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)
Ottenere gli allegati di messaggi di posta nidificati
Gli allegati OLE incorporati compaiono anche nella collezione Attachment della classe MapiMessage. Il seguente esempio di codice analizza un file di messaggio alla ricerca di allegati di messaggi incorporati e lo salva su disco. Il metodo statico FromProperties() della classe MapiMessage può creare un nuovo messaggio da un allegato incorporato. Il frammento di codice seguente mostra come ottenere gli allegati di messaggi di posta nidificati.
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)
Rimozione di allegati
La libreria Aspose Outlook fornisce la funzionalità per rimuovere gli allegati dai file Microsoft Outlook Message (.msg):
- Chiama il metodo RemoveAttachments(). Accetta il percorso del file del messaggio come parametro. È implementato come metodo statico pubblico, quindi non è necessario istanziare l’oggetto.
Il seguente frammento di codice mostra come rimuovere gli allegati.
import aspose.email as ae
ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")
Puoi anche chiamare il metodo statico DestoryAttachment() della classe MapiMessage. Funziona più velocemente di RemoveAttachment(), perché quest’ultimo metodo analizza il file del messaggio.
import aspose.email as ae
# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments(data_dir + "AttachmentsToDestroy_out.msg")
Aggiungere allegati MSG
Un messaggio Outlook può contenere altri messaggi Microsoft Outlook negli allegati, sia come messaggi normali sia incorporati. La MapiAttachmentCollection fornisce versioni sovraccaricate del metodo Add per creare messaggi Outlook con entrambi i tipi di allegati.
Provalo!
Aggiungi o rimuovi allegati email online con il gratuito App Aspose.Email Editor.
Aggiungere un allegato di riferimento a una MapiMessage
"Allegato di riferimento" tipicamente si riferisce a un allegato che contiene un riferimento o un link a una risorsa esterna anziché il file stesso. Questi riferimenti sono spesso usati nelle email HTML per collegare immagini o risorse esterne ospitate su un server remoto. Invece di incorporare l’intero file, un allegato di riferimento include un URL o un riferimento al contenuto esterno.
Aspose.Email fornisce un insieme di strumenti per la corretta visualizzazione degli allegati di riferimento presentati nel seguente esempio di codice:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("message.msg")
# Add reference attachment
msg.attachments.add("Document.pdf",
"https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
"https://drive.google.com/drive/my-drive",
"GoogleDrive")
# Also, you can set additional attachment properties
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PERMISSION_TYPE, int(ae.AttachmentPermissionType.ANYONE_CAN_EDIT))
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_ORIGINAL_PERMISSION_TYPE, 0)
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_IS_FOLDER, False)
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PROVIDER_ENDPOINT_URL, "")
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PREVIEW_URL, "")
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_THUMBNAIL_URL, "")
# Finally save the message
msg.save("msg_with_ref_attach.msg")
Incorporare un messaggio come allegato
Il seguente frammento di codice mostra come i file Outlook MSG incorporati in un file MSG contengano un PR_ATTACH_METHOD il cui valore è 5.
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")
Leggere messaggi incorporati dagli allegati
Il seguente frammento di codice mostra come leggere un messaggio incorporato da un allegato.
import aspose.email as ae
file_name = "path/to/file.msg"
# Load the MapiMessage from file
message = ae.mapi.MapiMessage.from_file(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
# ...
Inserimento e sostituzione degli allegati
L’API Aspose.Email consente di inserire allegati in un indice specifico nel messaggio genitore. Fornisce anche la possibilità di sostituire i contenuti di un allegato con quelli di un altro allegato di messaggio. Il frammento di codice seguente mostra l’inserimento e la sostituzione degli allegati.
Inserire in una posizione specifica
L’API Aspose.Email fornisce la possibilità di inserire un allegato MSG in un MSG genitore usando il metodo Insert della MapiAttachmentCollection: MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Il frammento di codice seguente mostra come inserire in una posizione specifica.
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)
Sostituire i contenuti dell’allegato
Ciò può essere usato per sostituire i contenuti di un allegato incorporato con quelli nuovi usando il metodo Replace. Tuttavia, non può essere usato per inserire un allegato con PR_ATTACH_NUM = 4 (ad esempio) in una collezione con collection.Count = 2. Il frammento di codice seguente mostra come sostituire i contenuti di un allegato.
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)
Rinominare un allegato in un MapiMessage
È possibile modificare i nomi visualizzati degli allegati nei messaggi email caricati da un file. Il campione di codice seguente mostra come farlo:
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"