Hantera bilagor i Outlook‑meddelanden
Den Skapa och spara Outlook‑meddelanden (MSG‑filer) artikeln förklarade stegen för att skapa och spara meddelanden, inklusive MSG‑filer med bilagor. Denna artikel går djupare in på hantering av Microsoft Outlook‑bilagor med Aspose.Email. Den kommer att guida dig genom åtkomst och sparande av bilagor från en meddelandefil med hjälp av attachments egenskap hos MapiMessage klass. Denna egenskap är en samling som tillhör MapiAttachmentCollection klass, vilket möjliggör effektiv hantering av bilagor.
Kontrollera inline vs regular‑bilagor
"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}")
Identifiera referensbilagor i MAPI‑meddelanden
Aspose.Email‑API:n inkluderar is_reference egenskap hos MapiAttachment klass som gör det möjligt för utvecklare att identifiera referensbilagor i ett meddelande. Prova kodexemplet nedan för att se hur det fungerar i ett python‑projekt:
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
Spara bilagor från MSG‑filer
För att spara bilagor från en MSG‑fil:
- Iterera igenom MapiAttachmentCollection samlingen och hämta de enskilda bilagorna.
- För att spara bilagorna, anropa MapiAttachment klass Save() metod.
Följande kodsnutt visar hur man sparar bilagor till den lokala hårddisken:
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)
Hantera TNEF‑bilagor
Ladda och spara bilagor i TNEF‑format
Aspose.Email tillhandahåller metoder för att hantera TNEF‑bilagor. Dessa metoder möjliggör att spara och läsa in bilagor i TNEF‑format, som ofta används i Outlook‑meddelanden (winmail.dat).
- static MapiAttachment MapiAttachment.load_from_tnef(string fileName) – Laddar en bilaga från en TNEF-fil.
- static MapiAttachment MapiAttachment.load_from_tnef(Stream stream) – Laddar en bilaga från en TNEF-ström.
- void MapiAttachment.save_to_tnef(string filename) – Sparar en bilaga till en TNEF-fil.
- void MapiAttachment.save_to_tnef(Stream stream) – Sparar en bilaga till en TNEF-ström.
Följande kodexempel visar hur man extraherar, sparar och lägger till TNEF‑formatets e‑postbilagor samtidigt som man hanterar dem via minnesströmmar eller filer:
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)
Hämta inbäddade e‑postmeddelandebilagor
De inbäddade OLE‑bilagorna (Object Linking and Embedding) visas också i bilagaskollektionen för MapiMessage klass. Kodexemplet nedan visar hur man parserar en meddelandefil och extraherar inbäddade meddelandebilagor, för att sedan spara dem på disk för vidare användning. MapiMessage klass erbjuder en from_properties statisk metod för att skapa ett nytt meddelande från en inbäddad bilaga. Följande kodsnutt visar hur du får åtkomst till inbäddade e‑postmeddelandebilagor:
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.Email‑biblioteket tillhandahåller funktionalitet för att ta bort bilagor från Microsoft Outlook‑meddelanden (.msg‑filer). Använd remove_attachments(path) metod som kräver sökvägen till meddelandefilen som parameter. Som en publik statisk metod kan du anropa den direkt utan att behöva skapa ett objekt, vilket gör processen enkel och effektiv.
Följande kodsnutt visar hur man tar bort bilagor från MSG‑filer med Aspose.Email:
import aspose.email as ae
ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")
Du kan också anropa den statiska destroy_attachments‑metoden i MapiMessage klass. Den fungerar snabbare än remove_attachments eftersom remove_attachments‑metoden analyserar meddelandefilen.
import aspose.email as ae
# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments("AttachmentsToDestroy_out.msg")
Lägg till MSG‑bilagor
Ett Outlook‑meddelande kan innehålla andra Microsoft Outlook‑meddelanden som bilagor, antingen som vanliga eller inbäddade. MapiAttachmentCollection tillhandahåller överlagrade medlemmar av lägga till metod för att skapa Outlook‑meddelanden med båda typerna av bilagor.
Try it out!
Lägg till eller ta bort e‑postbilagor online med den kostnadsfria Aspose.Email Editor App.
Lägg till referensbilagor i MAPI‑meddelanden
Reference attachment avser vanligtvis en bilaga som innehåller en referens eller länk till en extern resurs snarare än den faktiska filen. Dessa referenser används ofta i HTML‑e‑post för att länka till externa bilder eller resurser som ligger 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.
För att lägga till en referensbilaga i ett MAPI‑meddelande, använd add metod för MapiAttachmentCollection klass och ReferenceAttachmentOptions klass för att specificera:
-
Innehålls‑URL (direktlänk till filen)
-
Leverantörens URL (länk till filens plats eller UI‑vy)
-
Bilagans leverantörsnamn (t.ex. "GoogleDrive")
som visas i kodexemplet nedan.
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")
Bädda in meddelanden som bilagor
Följande kodsnutt demonstrerar hur man bäddar in Outlook‑MSG‑filer som bilagor i en annan MSG‑fil. En inbäddad MSG‑fil innehåller en PR_ATTACH_METHOD‑egenskap med värdet 5, vilket indikerar att den är en bilaga av typen "message".
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 bilagor.
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
# ...
Infoga och ersätta bilagor
Aspose.Email‑API:n erbjuder funktionalitet för att infoga bilagor på ett specifikt index i föräldrameddelandet. Dessutom ger den möjlighet att ersätta innehållet i en befintlig bilaga med en annan meddelandebilaga. Nedan finns kodsnuttar som visar hur man utför bilageinfogning och -ersättning.
Infoga bilagor på specifika platser
Aspose.Email‑API:n gör det möjligt att infoga en MSG‑bilaga i ett föräldra‑MSG med Insert‑metoden i MapiAttachmentCollection. Denna metod används med signaturen MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Nedan är en kodsnutt som illustrerar hur man infogar en bilaga 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
Du kan använda replace metod för att uppdatera innehållet i en inbäddad bilaga med ny data. Observera dock att denna metod inte kan användas för att infoga en bilaga med PR_ATTACH_NUM = 4 i en samling som bara innehåller 2 bilagor. Nedan finns ett kodsnutt som demonstrerar hur du ersätter bilagans 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å bilagor i MapiMessages
Med Aspose.Email kan du enkelt ändra visningsnamnen för bilagor i e‑postmeddelanden som lästs in från en fil. Följande kodexempel 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"