Zarządzanie załącznikami w wiadomościach Outlook
Ten Tworzenie i zapisywanie wiadomości Outlook (plików MSG) artykuł wyjaśniał kroki związane z tworzeniem i zapisywaniem wiadomości, w tym plików MSG z załącznikami. Ten artykuł zagłębia się w zarządzanie załącznikami Microsoft Outlook przy użyciu Aspose.Email. Prowadzi Cię przez dostęp i zapisywanie załączników z pliku wiadomości przy użyciu attachments właściwość MapiMessage class. Ta właściwość jest kolekcją należącą do MapiAttachmentCollection class, umożliwiający efektywną obsługę załączników.
Sprawdź, czy załącznik jest Inline czy Regular
"Inline" i "Regular" to określenia sposobu, w jaki załączniki są dołączane do wiadomości e-mail. Regular to załączniki plikowe dołączane w tradycyjny sposób. Zwykle wyświetlane są na liście w kliencie poczty i mogą być pobrane przez odbiorcę oraz zapisane w lokalnym magazynie. Inline, znane także jako osadzone lub obrazy inline, są zazwyczaj używane do wstawiania obrazów lub innych mediów w treść wiadomości. Nie są wyświetlane na oddzielnej liście, lecz bezpośrednio w treści e‑maila, np. w ciele wiadomości. Pozwala to na dołączenie obrazów lub mediów będących częścią treści wiadomości. Poniższy przykład kodu demonstruje, jak określić, czy załącznik jest inline, czy regularny:
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}")
Identyfikacja referencyjnych załączników w wiadomościach MAPI
API Aspose.Email zawiera is_reference właściwość MapiAttachment class, który umożliwia programistom identyfikację referencyjnych załączników w wiadomości. Wypróbuj poniższy przykład kodu, aby zobaczyć, jak działa w projekcie 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
Zapisz załączniki z plików MSG
Aby zapisać załączniki z pliku MSG:
- Iteruj przez MapiAttachmentCollection kolekcję i pobierz poszczególne załączniki.
- Aby zapisać załączniki, wywołaj MapiAttachment klasa Save() metoda.
Poniższy fragment kodu pokazuje, jak zapisać załączniki na lokalnym dysku:
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)
Obsługa załączników TNEF
Ładowanie i zapisywanie załączników w formacie TNEF
Aspose.Email udostępnia metody do obsługi załączników TNEF. Metody te pozwalają na zapisywanie i wczytywanie załączników w formacie TNEF, powszechnie używanym w wiadomościach Outlook (winmail.dat).
- static MapiAttachment MapiAttachment.load_from_tnef(string fileName) – Ładuje załącznik z pliku TNEF.
- static MapiAttachment MapiAttachment.load_from_tnef(Stream stream) – Ładuje załącznik ze strumienia TNEF.
- void MapiAttachment.save_to_tnef(string filename) – Zapisuje załącznik do pliku TNEF.
- void MapiAttachment.save_to_tnef(Stream stream) – Zapisuje załącznik do strumienia TNEF.
Poniższy przykład kodu demonstruje, jak wyodrębnić, zapisać i ponownie dodać załączniki e-mail w formacie TNEF, zarządzając nimi za pośrednictwem strumieni pamięci lub plików:
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)
Pobieranie zagnieżdżonych załączników wiadomości e-mail
Załączniki Embedded OLE (Object Linking and Embedding) pojawiają się również w kolekcji załączników MapiMessage class. Poniższy przykład kodu demonstruje, jak parsować plik wiadomości i wyodrębnić osadzone załączniki wiadomości, a następnie zapisać je na dysku do dalszego użycia. MapiMessage class oferuje from_properties statyczna metoda do tworzenia nowej wiadomości z osadzonego załącznika. Poniższy fragment kodu pokazuje, jak uzyskać zagnieżdżone załączniki wiadomości e-mail:
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)
Usuń załączniki
Biblioteka Aspose.Email zapewnia możliwość usuwania załączników z plików Microsoft Outlook Message (.msg). Użyj remove_attachments(path) metoda, która wymaga ścieżki do pliku wiadomości jako parametru. Jako metoda publiczna statyczna, można ją wywołać bezpośrednio bez konieczności tworzenia obiektu, co sprawia, że proces jest prosty i wydajny.
Poniższy fragment kodu pokazuje, jak usunąć załączniki z plików MSG przy użyciu Aspose.Email:
import aspose.email as ae
ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")
Możesz również wywołać statyczną metodę destroy_attachments klasy MapiMessage class. Działa szybciej niż remove_attachments, ponieważ metoda remove_attachments parsuje plik wiadomości.
import aspose.email as ae
# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments("AttachmentsToDestroy_out.msg")
Dodaj załączniki MSG
Wiadomość Outlook może zawierać inne wiadomości Microsoft Outlook jako załączniki, zarówno zwykłe, jak i osadzone. MapiAttachmentCollection udostępnia przeciążone elementy dodaj metoda do tworzenia wiadomości Outlook z oboma typami załączników.
Wypróbuj!
Dodawaj lub usuń załączniki e‑mail online przy użyciu darmowego Aspose.Email Editor App.
Dodaj referencyjne załączniki do wiadomości MAPI
Referencyjny załącznik zazwyczaj odnosi się do załącznika, który zawiera odwołanie lub link do zewnętrznego zasobu, a nie do samego pliku. Takie odwołania są często używane w e‑mailach HTML, aby linkować do zewnętrznych obrazów lub zasobów hostowanych na zdalnym serwerze. Zamiast osadzania całego pliku, załącznik referencyjny zawiera URL lub odwołanie do zewnętrznej treści.
Aby dodać referencyjny załącznik do wiadomości MAPI, użyj add metoda MapiAttachmentCollection klasa i ReferenceAttachmentOptions class do określenia:
-
Adres URL zawartości (bezpośredni link do pliku)
-
Adres URL dostawcy (link do lokalizacji pliku lub widoku UI)
-
Nazwa dostawcy załączników (np. "GoogleDrive")
jak pokazano w poniższym przykładzie kodu.
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")
Osadzanie wiadomości jako załączniki
Poniższy fragment kodu demonstruje, jak osadzić pliki Outlook MSG jako załączniki w innym pliku MSG. Osadzony plik MSG zawiera właściwość PR_ATTACH_METHOD o wartości 5, co wskazuje, że jest to załącznik typu "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")
Odczyt osadzonych wiadomości z załączników
Poniższy fragment kodu pokazuje, jak odczytać osadzone wiadomości z załączników.
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
# ...
Wstaw i zastąp załączniki
API Aspose.Email oferuje możliwość wstawiania załączników pod określonym indeksem w obrębie wiadomości nadrzędnej. Dodatkowo umożliwia zastąpienie zawartości istniejącego załącznika innym załącznikiem wiadomości. Poniżej znajdują się fragmenty kodu demonstrujące, jak wykonać wstawianie i zastępowanie załączników.
Wstawianie załączników w określonych miejscach
API Aspose.Email umożliwia wstawienie załącznika MSG do nadrzędnego MSG przy użyciu metody Insert klasy MapiAttachmentCollection. Ta metoda jest używana z sygnaturą MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Poniżej znajduje się fragment kodu ilustrujący, jak wstawić załącznik w określone miejsce:
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)
Zastąp zawartość załącznika
Możesz użyć replace metoda służy do aktualizacji zawartości wbudowanego załącznika nowymi danymi. Należy jednak pamiętać, że tej metody nie można używać do wstawiania załącznika z PR_ATTACH_NUM = 4 do kolekcji, która zawiera tylko 2 załączniki. Poniżej znajduje się fragment kodu demonstrujący, jak zastąpić zawartość załącznika:
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)
Zmienianie nazw załączników w MapiMessages
Dzięki Aspose.Email możesz łatwo modyfikować wyświetlane nazwy załączników w wiadomościach e-mail załadowanych z pliku. Poniższy przykład kodu pokazuje, jak to zrobić:
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"