Arbeta med meddelandebilagor

Hantera bilagor med Aspose Outlook

Skapande och sparande av Outlook‑meddelanden (MSG) förklarar hur man skapar och sparar meddelanden samt hur man skapar MSG‑filer med bilagor. Denna artikel förklarar hur man hanterar Microsoft Outlook‑bilagor med Aspose.Email. Bilagor från en meddelandefil nås och sparas till disk med hjälp av MapiMessage‑klassens Attachments‑egenskap. Attachments‑egenskapen är en samling av typen MapiAttachmentCollection‑klass.

Kontrollera om bilagan är inline eller vanlig

"Inline" och "Regular" bilagor avser hur de inkluderas i ett e‑postmeddelande. Regular‑bilagor är filer som bifogas på traditionellt sätt. De visas vanligtvis i en lista i e‑postklienten och kan laddas ner av mottagaren och sparas lokalt. Inline‑bilagor, även kända som inbäddade eller inline‑bilder, används oftast för att inkludera bilder eller annat media i meddelandekroppen. De visas inte i en separat lista utan visas direkt i e‑postens innehåll, exempelvis i meddelandekroppen. Detta gör det möjligt att inkludera bilder eller annat media som är en del av meddelandets innehåll. Kodexemplet nedan visar hur man avgör om en bilaga är inline eller 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}")

Spara bilagor från Outlook‑meddelande (MSG)-fil

För att spara bilagor från en MSG‑fil:

  1. Iterera genom MapiAttachmentCollection‑samlingen och hämta de individuella bilagorna.
  2. För att spara bilagorna, anropa MapiAttachment‑klassens Save()-metod.

Följande kodsnutt visar hur du sparar bilagor till den lokala disken.

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)

Hämta inbäddade e‑postmeddelande‑bilagor

Inbäddade OLE‑bilagor visas också i MapiMessage‑klassens Attachment‑samling. Följande kodexempel parsar en meddelandefil för inbäddade meddelandebilagor och sparar dem till disk. MapiMessage‑klassens statiska metod FromProperties() kan skapa ett nytt meddelande från en inbäddad bilaga. Följande kodsnutt visar hur du får åtkomst till inbäddade e‑postmeddelande‑bilagor.

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)

Ta bort bilagor

Aspose Outlook‑biblioteket ger funktionalitet för att ta bort bilagor från Microsoft Outlook‑meddelanden (.msg)-filer:

  • Anropa RemoveAttachments()-metoden. Den tar sökvägen till meddelandefilen som parameter. Den är implementerad som en offentlig statisk metod, så du behöver inte instansiera objektet.

Följande kodsnutt visar hur du tar bort bilagor.

import aspose.email as ae

ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")

Du kan också anropa MapiMessage‑klassens statiska metod DestoryAttachment(). Den fungerar snabbare än RemoveAttachment(), eftersom RemoveAttachment()-metoden parsar meddelandefilen.

import aspose.email as ae

# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments(data_dir + "AttachmentsToDestroy_out.msg")

Lägga till MSG‑bilagor

Ett Outlook‑meddelande kan innehålla andra Microsoft Outlook‑meddelanden som bilagor, antingen som vanliga eller inbäddade meddelanden. MapiAttachmentCollection tillhandahåller överlagrade versioner av Add‑metoden för att skapa Outlook‑meddelanden med båda typerna av bilagor.

Lägg till en referensbilaga till ett MapiMessage

"Referensbilaga" avser vanligtvis en bilaga som innehåller en referens eller länk till en extern resurs snarare än själva filen. Sådana referenser används ofta i HTML‑e‑post för att länka till externa bilder eller resurser som är hostade på en fjärrserver. Istället för att bädda in hela filen, innehåller en referensbilaga en URL eller referens till det externa innehållet.

Aspose.Email tillhandahåller ett verktygssats för korrekt visning av referensbilagor, presenterade i följande kodexempel:

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")

Bädda in ett meddelande som bilaga

Följande kodsnutt visar hur Outlook‑MSG‑filer som är inbäddade i en MSG‑fil innehåller ett PR_ATTACH_METHOD med värdet 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")

Läs inbäddade meddelanden från bilagor

Följande kodsnutt visar hur du läser inbäddade meddelanden från en bilaga.

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
    # ...

Infogning och ersättning av bilagor

Aspose.Email API ger möjlighet att infoga bilagor på ett specifikt index i föräldrameddelandet. Det möjliggör också att ersätta innehållet i en bilaga med en annan meddelandebilaga. Följande kodsnutt visar hur du gör bilage‑infogning och -ersättning.

Infoga på en specifik plats

Aspose.Email API ger möjlighet att infoga en MSG‑bilaga i ett föräldra‑MSG med MapiAttachmentCollection:s Insert‑metod MapiAttachmentCollection.Insert(int index, string name, MapiMessage msg). Följande kodsnutt visar hur du infogar på en specifik plats.

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)

Ersätt bilageinnehåll

Detta kan användas för att ersätta inbäddade bilagors innehåll med nya med hjälp av Replace‑metoden. Det kan dock inte användas för att infoga en bilaga med PR_ATTACH_NUM = 4 (t.ex.) i en samling med collection.Count = 2. Följande kodsnutt visar hur du ersätter bilagors innehåll.

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)

Byt namn på en bilaga i ett MapiMessage

Det är möjligt att ändra visningsnamnen för bilagorna i e‑postmeddelanden som laddats från en fil. Kodexemplet nedan visar hur du gör detta:

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"