Praca z załącznikami wiadomości
Zarządzanie załącznikami przy użyciu Aspose Outlook
Tworzenie i zapisywanie plików Outlook Message (MSG) wyjaśnia, jak tworzyć i zapisywać wiadomości oraz jak tworzyć pliki MSG z załącznikami. Ten artykuł wyjaśnia, jak zarządzać załącznikami Microsoft Outlook przy użyciu Aspose.Email. Załączniki z pliku wiadomości są dostępne i zapisywane na dysk przy użyciu właściwości Attachments klasy MapiMessage. Właściwość Attachments jest kolekcją typu klasy MapiAttachmentCollection.
Sprawdź, czy załącznik jest wbudowany (inline) czy zwykły
"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}")
Zapisz załączniki z pliku Outlook Message (MSG)
Aby zapisać załączniki z pliku MSG:
- Iteruj przez kolekcję MapiAttachmentCollection i pobieraj poszczególne załączniki.
- Aby zapisać załączniki, wywołaj metodę Save() klasy MapiAttachment.
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.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)
Pobieranie zagnieżdżonych załączników wiadomości e‑mail
Osadzone załączniki OLE pojawiają się również w kolekcji Attachment klasy MapiMessage. Poniższy przykład kodu parsuje plik wiadomości w poszukiwaniu osadzonych załączników i zapisuje je na dysku. Statyczna metoda FromProperties() klasy MapiMessage może utworzyć nową wiadomość z osadzonego załącznika. Poniższy fragment kodu pokazuje, jak pobrać 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)
Usuwanie załączników
Biblioteka Aspose Outlook zapewnia funkcjonalność usuwania załączników z plików Microsoft Outlook Message (.msg):
- Wywołaj metodę RemoveAttachments(). Przyjmuje ona ścieżkę do pliku wiadomości jako parametr. Jest zaimplementowana jako metoda publiczna statyczna, więc nie musisz tworzyć obiektu.
Poniższy fragment kodu pokazuje, jak usuwać załączniki.
import aspose.email as ae
ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")
Możesz również wywołać statyczną metodę DestoryAttachment() klasy MapiMessage. Działa szybciej niż RemoveAttachment(), ponieważ metoda RemoveAttachment() parsuje plik wiadomości.
import aspose.email as ae
# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments(data_dir + "AttachmentsToDestroy_out.msg")
Dodawanie załączników MSG
Wiadomość Outlook może zawierać inne wiadomości Microsoft Outlook jako załączniki, zarówno jako zwykłe, jak i osadzone wiadomości. MapiAttachmentCollection udostępnia przeciążone wersje metody Add, umożliwiając tworzenie 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 załącznik referencyjny do MapiMessage
"Załącznik referencyjny" zazwyczaj odnosi się do załącznika, który zawiera odwołanie lub link do zasobu zewnętrznego, a nie sam plik. 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 osadzać cały plik, załącznik referencyjny zawiera URL lub odwołanie do zewnętrznej zawartości.
Aspose.Email udostępnia zestaw narzędzi do prawidłowego wyświetlania referencyjnych załączników, przedstawionych w poniższym przykładzie kodu:
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")
Osadź wiadomość jako załącznik
Poniższy fragment kodu pokazuje, jak pliki Outlook MSG osadzone w pliku MSG zawierają PR_ATTACH_METHOD o wartości 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")
Odczyt osadzonych wiadomości z załączników
Poniższy fragment kodu pokazuje, jak odczytać osadzoną wiadomość z załącznika.
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
# ...
Wstawianie i zastępowanie załączników
API Aspose.Email umożliwia wstawianie załączników pod określonym indeksem w wiadomości nadrzędnej. Zapewnia również możliwość zastąpienia zawartości załącznika innym załącznikiem wiadomości. Poniższy fragment kodu pokazuje wstawianie i zastępowanie załączników.
Wstaw w określonym miejscu
API Aspose.Email umożliwia wstawienie załącznika MSG do nadrzędnego MSG przy użyciu metody Insert kolekcji MapiAttachmentCollection: MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Poniższy fragment kodu pokazuje, jak wstawić w określonym miejscu.
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żna tego używać do zastąpienia zawartości osadzonych załączników nowymi przy pomocy metody Replace. Nie można jednak wstawić załącznika z PR_ATTACH_NUM = 4 (na przykład) w kolekcji, której collection.Count = 2. Poniższy fragment kodu pokazuje, 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)
Zmień nazwę załącznika w MapiMessage
Możliwe jest zmodyfikowanie nazw wyświetlanych załączników w wiadomościach e‑mail wczytanych 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"