Verwalten von Anhängen in Outlook‑Nachrichten

Die Erstellen und Speichern von Outlook‑Nachrichten (MSG)‑Dateien Der Artikel erklärte die Schritte zum Erstellen und Speichern von Nachrichten, einschließlich MSG‑Dateien mit Anhängen. Dieser Artikel behandelt die Verwaltung von Microsoft‑Outlook‑Anhängen mit Aspose.Email. Er führt Sie durch das Zugreifen und Speichern von Anhängen aus einer Nachrichten‑Datei mithilfe des attachments Eigenschaft des MapiMessage Klasse. Diese Eigenschaft ist eine Sammlung, die zu MapiAttachmentCollection Klasse, die eine effiziente Handhabung von Anhängen ermöglicht.

Inline‑ vs. reguläre Anhänge prüfen

"Inline" und "Regular" beziehen sich darauf, wie sie in einer E‑Mail‑Nachricht eingebunden sind. Regular‑Anhänge sind Dateien, die auf herkömmliche Weise angehängt werden. Sie werden typischerweise in einer Liste im E‑Mail‑Client angezeigt und können vom Empfänger heruntergeladen und lokal gespeichert werden. Inline‑Anhänge, auch als eingebettete oder Inline‑Bilder bezeichnet, werden typischerweise verwendet, um Bilder oder andere Medien im Nachrichtentext einzufügen. Sie erscheinen nicht in einer separaten Liste, sondern werden direkt im Inhalt der E‑Mail, zum Beispiel im Textkörper, angezeigt. So können Sie Bilder oder andere Medien, die Teil des Nachrichteninhalts sind, einbinden. Das folgende Codebeispiel demonstriert, wie ermittelt wird, ob ein Anhang inline oder regulär ist:

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

Referenz‑Anhänge in MAPI‑Nachrichten identifizieren

Die Aspose.Email‑API beinhaltet die is_reference Eigenschaft des MapiAttachment Klasse, die Entwicklern ermöglicht, Referenz‑Anhänge in einer Nachricht zu identifizieren. Probieren Sie das nachstehende Codebeispiel in einem Python‑Projekt aus:

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

Anhänge aus MSG‑Dateien speichern

Um Anhänge aus einer MSG‑Datei zu speichern:

  1. Iterieren Sie durch die MapiAttachmentCollection Sammlung auf und holen Sie die einzelnen Anhänge.
  2. Um die Anhänge zu speichern, rufen Sie die MapiAttachment Klasse Save() Methode.

Das folgende Code‑Snippet zeigt, wie Sie Anhänge auf die lokale Festplatte speichern:

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)

Handhabung von TNEF‑Anhängen

Anhänge im TNEF‑Format laden und speichern

Aspose.Email stellt Methoden zur Handhabung von TNEF‑Anhängen bereit. Diese Methoden ermöglichen das Speichern und Laden von Anhängen im TNEF‑Format, das häufig in Outlook‑Nachrichten (winmail.dat) verwendet wird.

Das folgende Codebeispiel demonstriert, wie TNEF‑Format‑E‑Mail‑Anhänge extrahiert, gespeichert und erneut hinzugefügt werden, wobei sie über Memory‑Streams oder Dateien verwaltet werden:

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)

Verschachtelte Mail‑Nachrichten‑Anhänge abrufen

Die eingebetteten OLE‑Anhänge (Object Linking and Embedding) erscheinen ebenfalls in der Anhang‑Sammlung von MapiMessage Klasse. Das nachstehende Codebeispiel demonstriert, wie eine Nachrichten‑Datei geparst und eingebettete Nachrichten‑Anhänge extrahiert werden, um sie anschließend zur weiteren Verwendung auf die Festplatte zu speichern. Die MapiMessage Klasse bietet ein from_properties statische Methode, um eine neue Nachricht aus einem eingebetteten Anhang zu erstellen. Das folgende Code‑Snippet zeigt, wie Sie verschachtelte Mail‑Nachrichten‑Anhänge erhalten:

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)

Anhänge entfernen

Die Aspose.Email‑Bibliothek bietet die Funktion, Anhänge aus Microsoft‑Outlook‑Message‑(.msg‑)Dateien zu entfernen. Verwenden Sie die remove_attachments(path) Methode, die den Pfad der Nachrichten‑Datei als Parameter benötigt. Als öffentliche statische Methode kann sie direkt aufgerufen werden, ohne ein Objekt zu instanziieren, was den Vorgang einfach und effizient macht.

Das folgende Code‑Snippet zeigt, wie Sie Anhänge aus MSG‑Dateien mit Aspose.Email entfernen:

import aspose.email as ae

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

Sie können außerdem die statische destroy_attachments‑Methode von MapiMessage Klasse. Sie arbeitet schneller als remove_attachments, weil die remove_attachments‑Methode die Nachrichten‑Datei analysiert.

import aspose.email as ae

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

MSG‑Anhänge hinzufügen

Eine Outlook‑Nachricht kann andere Microsoft‑Outlook‑Nachrichten als Anhänge enthalten, entweder als reguläre oder eingebettete. Der MapiAttachmentCollection stellt überladene Mitglieder von hinzufügen Methode zum Erstellen von Outlook‑Nachrichten mit beiden Anlagentypen.

Referenz‑Anhänge zu MAPI‑Nachrichten hinzufügen

Referenz‑Anhang bezieht sich typischerweise auf einen Anhang, der eine Referenz oder einen Link zu einer externen Ressource enthält, anstatt die eigentliche Datei. Diese Referenzen werden häufig in HTML‑E‑Mails verwendet, um auf externe Bilder oder Ressourcen zu verlinken, die auf einem entfernten Server gehostet werden. Anstatt die gesamte Datei einzubetten, enthält ein Referenz‑Anhang eine URL oder einen Verweis auf den externen Inhalt.

Um einen Referenz‑Anhang zu einer MAPI‑Nachricht hinzuzufügen, verwenden Sie die add Methode des MapiAttachmentCollection class and the ReferenceAttachmentOptions Klasse zur Angabe:

  • Die Inhalts‑URL (Direktlink zur Datei)

  • Die Anbieter‑URL (Link zum Speicherort der Datei oder zur UI‑Ansicht)

  • Der Name des Anhang‑Anbieters (z. B. "GoogleDrive")

wie im nachstehenden Codebeispiel gezeigt.

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

Nachrichten als Anhänge einbetten

Das folgende Code‑Snippet demonstriert, wie Outlook‑MSG‑Dateien als Anhänge in einer anderen MSG‑Datei eingebettet werden. Eine eingebettete MSG‑Datei enthält die PR_ATTACH_METHOD‑Eigenschaft mit dem Wert 5, was anzeigt, dass es sich um einen Anhang vom Typ "message" handelt.

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

Eingebettete Nachrichten aus Anhängen lesen

Das folgende Code‑Snippet zeigt, wie eingebettete Nachrichten aus Anhängen gelesen werden.

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

Anhänge einfügen und ersetzen

Die Aspose.Email‑API bietet die Möglichkeit, Anhänge an einem bestimmten Index innerhalb der übergeordneten Nachricht einzufügen. Außerdem ermöglicht sie das Ersetzen des Inhalts eines bestehenden Anhangs durch einen anderen Nachrichten‑Anhang. Nachfolgend Code‑Snippets, die zeigen, wie das Einfügen und Ersetzen von Anhängen durchgeführt wird.

Anhänge an bestimmten Positionen einfügen

Die Aspose.Email‑API ermöglicht das Einfügen eines MSG‑Anhangs in ein übergeordnetes MSG mittels der Insert‑Methode der MapiAttachmentCollection. Diese Methode wird mit der Signatur MapiAttachmentCollection Insert(int index, string name, MapiMessage msg) verwendet. Nachfolgend ein Code‑Snippet, das zeigt, wie ein Anhang an einer bestimmten Stelle eingefügt wird:

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)

Anhangsinhalte ersetzen

Sie können die replace Methode zum Aktualisieren des Inhalts eines eingebetteten Anhangs mit neuen Daten. Beachten Sie jedoch, dass diese Methode nicht verwendet werden kann, um einen Anhang mit PR_ATTACH_NUM = 4 in eine Sammlung einzufügen, die nur 2 Anhänge enthält. Nachfolgend ein Code‑Snippet, das zeigt, wie Anhangsinhalte ersetzt werden:

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)

Anhänge in MapiMessages umbenennen

Mit Aspose.Email können Sie die Anzeigenamen von Anhängen in aus einer Datei geladenen E‑Mail‑Nachrichten einfach ändern. Das folgende Codebeispiel zeigt, wie Sie dies erreichen:

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"