Lesen und Ändern von Nachrichten in der Exchange 2013-Transportpipeline
Erfahren Sie mehr über die .NET Framework Klassen, die Sie in Ihren Exchange 2013-Transport-Agents zum Lesen, Schreiben und Ändern von Nachrichten verwenden können.
Gilt für: Exchange Server 2013
- Klassen zum Lesen, Schreiben oder Ändern von Nachrichten
- Encoders-Namespace
- iCalendar-Namespace
- MIME-Namespace
- TextConverters-Namespace
- Tnef-Namespace
- vCard-Namespace
Wenn Nachrichten die Transportpipeline durchlaufen, kann Ihr Transport-Agent Nachrichteninhalte zwischen verschiedenen Datenformaten lesen, schreiben und konvertieren. Beispielsweise können Sie MIME-Daten lesen und schreiben, eingehende Nachrichten im Format Uuencoded oder Anführungszeichen drucken (qp) identifizieren und diese dann in einen von Ihrer Organisation verwendeten Standard konvertieren oder Kalender- oder Kontaktinformationen lesen und dann speichern, die eingehenden Nachrichten zugeordnet sind.
Sie können auch Inhalte identifizieren, die ein Sicherheitsrisiko darstellen, und den Inhalt oder die Nachrichten, die sie enthalten, verschieben oder löschen. z. B. durch Entfernen von Links in einer HTML-Nachricht.
Dieser Artikel enthält Informationen zu den .NET Framework Klassen, die Sie zum Lesen, Schreiben und Ändern von Nachrichten verwenden können.
Vorsicht
Viele der Eigenschaften und Parameter in den Inhaltskonvertierungs-APIs lassen Werte zu, die groß genug sind, um Leistungsprobleme zu verursachen, einschließlich Denial-of-Service. Wenn Sie die Inhaltskonvertierungs-APIs in einem Transport-Agent verwenden, sollten Sie Grenzwerte für die Größen von Eigenschafts- und Parameterwerten implementieren, die Sie beim Lesen oder Schreiben unterstützen, um den Ressourcenverbrauch durch Ihren Agent zu begrenzen.
Klassen zum Lesen, Schreiben oder Ändern von Nachrichten
In der folgenden Tabelle sind die .NET Framework Klassen aufgeführt, die Sie zum Lesen, Schreiben und Ändern von E-Mail-Nachrichten verwenden können.
.NET Framework Namespaces für die Nachrichtenverarbeitung
.NET Framework Namespace | Kurse |
---|---|
Microsoft.Exchange.Data.Mime.Encoders |
Enthält Klassen für die In-Memory-Codierung und -Decodierung, eine Encoderstreamklasse, die eine der Encoder- oder Decoderklassen akzeptiert, die in einer zugeordneten Enumeration enthalten sind, und die ByteEncoder-Basisklasse und die ByteEncoderException-Ausnahmeklasse für die Encoder und Decoder. |
Microsoft.Exchange.Data.ContentTypes.iCalendar |
Enthält Typen, mit denen Sie Datenströme lesen und schreiben können, die Kalenderinformationen enthalten. Umfasst einen Kalenderleser und -writer, ein Ausnahmeobjekt, ein Serienobjekt sowie Strukturen und Enumerationen, mit denen Sie Eigenschafteninformationen zu Kalenderelementen zurückgeben können. |
Microsoft.Exchange.Data.Mime |
Enthält Klassen, Strukturen, Enumerationen und Delegaten, die Sie zum Erstellen, Lesen, Schreiben, Durchlaufen, Codieren und Decodieren von MIME-Daten verwenden können. Umfasst einen streambasierten Reader und Writer, der Ihnen vorwärtsgeschützten Lese- und Schreibzugriff auf MIME-Datenströme sowie DOM-basierte Methoden und Klassen bietet, die Sie für MIME-Dokumente verwenden können. |
Microsoft.Exchange.Data.TextConverters |
Enthält Klassen, Strukturen, Enumerationen und Delegaten, mit denen Sie einen Datenstrom lesen und schreiben und Konvertierungen zwischen bestimmten Datentypen durchführen können. Beispiel: HTML-zu-Rich-Text-Format (RTF). Textkonverter ermöglichen es Ihnen, das Format eines Dokumentstreams von einem Formular in ein anderes zu ändern und selektiv Elemente eines Dokuments zu entfernen, die ein Sicherheitsrisiko darstellen könnten. |
Microsoft.Exchange.Data.ContentTypes.Tnef |
Enthält einen Vorwärtsleser und -writer, eine Ausnahmeklasse sowie Strukturen und Enumerationen, die das Lesen und Schreiben von TNEF-Daten (Transport Neutral Encapsulation Format) erleichtern. |
Microsoft.Exchange.Data.ContentTypes.vCard |
Enthält einen Forward-Only-Streamleser und -Writer, eine Ausnahmeklasse sowie Strukturen und Enumerationen, die das Lesen und Schreiben von Kontaktdaten im vCard-Format erleichtern. |
Encoders-Namespace
Der Encoders-Namespace enthält Klassen für die In-Memory-Codierung und -Decodierung. Diese erben von der ByteEncoder-Basisklasse . Klassen codieren und decodieren für Base64, BinHex, Quoted-printable (qp) und Unix-to-Unix (Uu). Die folgenden Klassen werden für die In-Memory-Codierung und -Decodierung verwendet:
Die Encoder und Decoder erben von der ByteEncoder-Basisklasse und verwenden die ByteEncoderException-Ausnahmeklasse für die Fehlerbehandlung.
Darüber hinaus enthält der Namespace die MacBinaryHeader-Klasse , die MacBinary-codierte Dateien identifiziert und deren zugeordneter Dateiheader liest.
Schließlich führt die EncoderStream-Klasse eine Konvertierung für einen Datenstrom anstelle eines In-Memory-Objekts durch. Diese Klasse akzeptiert eine der Encoder- oder Decoderklassen und liest oder schreibt gemäß der zugehörigen EncoderStreamAccess-Enumeration .
iCalendar-Namespace
Der iCalendar-Namespace bietet einen Vorwärtsleser und Writer für iCalendar-Daten, zusätzlich zu unterstützenden Strukturen und Klassen zum Erstellen, Zugreifen auf und Ändern von iCalendar-Streams.
Die Klassen CalendarReader und CalendarWriter werden zum Lesen und Schreiben von iCalendar-Streamdaten verwendet.
Der CalendarReader verwendet einen lesbaren Stream als Argument für seine Konstruktoren. Anschließend können Sie die Methoden ReadFirstChildComponent, ReadNextSiblingComponent und ReadNextComponent verwenden, um sequenziell auf die iCalendar-Komponenten im Datenstrom zuzugreifen. Basierend auf dem Wert, den Sie für die ComplianceMode-Eigenschaft festgelegt haben, führen Fehler im iCalendar-Stream dazu, dass eine Ausnahme ausgelöst wird oder die ComplianceStatus-Eigenschaft auf einen anderen Wert als Compliant festgelegt wird. Sie können diese Eigenschaft überprüfen, um Probleme mit eingehenden iCalendar-Daten zu ermitteln.
Die CalendarWriter-Klasse verwendet einen schreibbaren Stream als Argument für ihre Konstruktoren.
MIME-Namespace
Der MIME-Namespace stellt Klassen bereit, mit denen Sie MIME-Dokumente erstellen, darauf zugreifen und ändern können. Sie können mit MIME-Dokumenten arbeiten, indem Sie entweder eine streambasierte oder dom-basierte Methode verwenden.
MimeDocument-Klasse und das MIME-DOM
Die MimeDocument-Klasse ermöglicht DOM-Zugriff auf ein MIME-Dokument. Verwenden Sie Objekte dieses Typs, wenn Sie über den verfügbaren Arbeitsspeicher verfügen, um ein gesamtes DOM zu laden und Sie zufälligen Zugriff auf die Header und den Inhalt der Nachricht haben müssen.
Sie laden Daten mithilfe der GetLoadStream- oder Load-Methode in ein MimeDocument-Objekt. Anschließend können Sie die DOM-Hierarchie durchlaufen und MIME-Daten erstellen, ändern oder entfernen. Nachdem Sie die MIME-Daten geändert haben, können Sie sie mit einer der WriteTo-Methoden in einen Stream schreiben.
Die folgende Abbildung zeigt die Struktur der Daten innerhalb eines MimeDocument-Objekts .
Abbildung 1: Struktur von MimeDocument-Objekten
MimeReader- und MimeWriter-Klassen und streambasierte MIME-Analyse
Die Klassen MimeReader und MimeWriter ermöglichen den Vorwärtszugriff auf MIME-Datenströme. Verwenden Sie diese Klassen, wenn Sie die MIME-Daten nicht ändern müssen, für die daten erforderlich sind, die bereits gelesen oder geschrieben wurden. Wenn Sie z. B. Nachrichten drucken möchten, die einem vordefinierten Format entsprechen, ist die MimeWriter-Klasse möglicherweise ideal.
Die MimeDocument-Klasse kapselt ein DOM. Die Klassen MimeReader und MimeWriter stellen Zustandscomputer dar. Ihre Zustände ändern sich basierend auf der empfangenen Eingabe und den aufgerufenen Methoden. Die Abbildungen 2 bis 5 sind vereinfachte Zustandsübergangsdiagramme, die für das MimeReader-Objekt zeigen, welche Methoden für den Aufruf aus jedem Zustand gültig sind und welchen Zustand sich ergeben wird.
Um diese Diagramme zu verwenden, folgen Sie den Pfeilen von einem Zustand zum nächsten, und notieren Sie sich die Methodenaufrufe oder Rückgabewerte, die dazu führen, dass sich der Zustand ändert. Angenommen, Sie befinden sich im ersten Diagramm am Anfang des Streams, der zu dem mimeReader gehört, den Sie erstellt haben. Um zum Status "Part Headers" zu gelangen, rufen Sie readNextPart oder ReadFirstChildPart in dieser Reihenfolge auf. Wenn Header vorhanden sind (d. h. wenn der MIME wohlgeformt ist), werden Sie in den Zustand Part Headers (Part Headers) versetzt. Andernfalls wird eine Ausnahme ausgelöst.
Abbildung 2: Vereinfachtes Zustandsübergangsdiagramm für MimeReader-Objekte
Hinweis
Die Abbildungen 3, 4 und 5 erweitern die in den vorherigen Diagrammen dargestellten Zustände.
Abbildung 3: Erweiterung des Zustands von Teilheadern aus Abbildung 2
Abbildung 4: Erweiterung des Headerzustands aus Abbildung 3, wenn ein Parameter in einem Header gefunden wurde
Hinweis
Der durch Abbildung 5 dargestellte Zustand ist rekursiv. Wenn eine Adressgruppe gefunden wird, können Sie die GroupRecipientReader-Eigenschaft verwenden, um die Adressen in der Gruppe zu lesen.
Abbildung 5: Erweiterung des Headerzustands aus Abbildung 3, wenn eine Adresse oder Adressgruppe gefunden wird
Abbildungen 6 und 7 zeigen vereinfachte Zustandsübergangsdiagramme für das MimeWriter-Objekt .
Hinweis
Abbildung 7 erweitert den in Abbildung 6 gezeigten Zustand der Teileüberschriften.
Abbildung 6 Vereinfachtes Zustandsübergangsdiagramm für MimeWriter-Objekte
Abbildung 7: Erweiterung des Zustands von Teilheadern aus Abbildung 6
TextConverters-Namespace
Der TextConverters-Namespace enthält Typen, die die Konvertierung des Inhalts von E-Mail-Nachrichten unterstützen. Diese Typen können codepagekonvertieren, nicht sicheren HTML-Code entfernen und andere Transformationen für E-Mail-Nachrichtentexte durchführen. Der Microsoft.Exchange.Data.TextConverters-Namespace enthält die folgenden Klassen, die von der abstrakten TextConverter-Klasse abgeleitet sind:
Mit diesen Textkonvertern können Sie das Format eines Dokumentstreams ändern oder Elemente entfernen, die nicht sicher aus einem HTML-Dokument sind. Diese Klassen können selbst verwendet werden, um eine Konvertierung mithilfe eines einzelnen Aufrufs einer der Convert-Methoden in der TextConverter-Basisklasse durchzuführen, oder sie können an einen Konstruktor des Konverters übergeben werden, der ihn zum Ausführen konvertierter Lese- oder Schreibvorgänge verwendet.
Die von der Basisklasse geerbte Funktionalität ist nützlich für konvertierungen, wenn Sie über ausreichend Speicherplatz zum Speichern des Originaldokuments und seiner konvertierten Ausgabe verfügen oder wenn Sie die Ergebnisse der Konvertierung speichern möchten. Die Convert-Methode verwendet Eingabe- und Ausgabestreams, Textleser oder Textwriter und konvertiert den Inhalt der Eingabe in die zugeordnete Ausgabe.
Im -Namespace sind auch die folgenden Textleser-, Writer- und Streamklassen enthalten:
ConverterReader – Abgeleitet von System.IO.TextReader.
ConverterWriter – Abgeleitet von System.IO.TextWriter.
ConverterStream – Abgeleitet von System.IO.Stream.
Diese werden verwendet, um Konvertierungen durchzuführen, wenn Sie keinen Platz zum Speichern des Originals oder der konvertierten Ausgabe haben, wenn Sie die Eingabe von einem Stream empfangen oder die Ausgabe an einen Stream senden oder wenn Sie die Ausgabe nur für Indizierungs- oder Suchzwecke verwenden möchten und daher das Ergebnis einer Konvertierung nicht speichern möchten.
Tnef-Namespace
Der Tnef-Namespace enthält Klassen und Typen, die streambasiertes Vorwärtslesen und Schreiben von TNEF-Daten ermöglichen. TNEF ist ein Datenformat, das verwendet wird, um MAPI-Eigenschaften für Clients zu kapseln, die MAPI nicht interpretieren können.
Die Klassen TnefReader und TnefWriter stellen die Kernfunktionen im Microsoft.Exchange.Data.ContentTypes.Tnef-Namespace bereit.
Die TnefReader-Klasse verwendet einen lesbaren Stream als Argument für ihre Konstruktoren. Anschließend verwenden Sie die ReadNextAttribute-Methode , um die Attribute im TNEF-Stream sequenziell zu lesen. Nachdem Sie ein Attribut gelesen haben, können Sie auf Informationen zum Attribut zugreifen, indem Sie eine der schreibgeschützten Eigenschaften des TnefReader-Objekts verwenden, zusätzlich zum Abrufen eines TnefPropertyReader zum Lesen der aktuellen Eigenschaft. Sie können auch direkt auf das aktuelle Attribut zugreifen, indem Sie die ReadAttributeRawValue-Methode verwenden.
Die TnefWriter-Klasse verwendet einen beschreibbaren Stream als Argument für ihre Konstruktoren. Die TnefWriter-Klasse bietet mehrere Möglichkeiten zum Schreiben von Daten in diesen Stream.
vCard-Namespace
Der vCard-Namespace enthält Klassen, Strukturen und Enumerationen, die zum Lesen und Schreiben von Kontaktinformationen verwendet werden, die in einer E-Mail-Nachricht im vCard-Datenformat enthalten sind. Der Namespace enthält einen Kontaktleser und -writer, eine Ausnahmeklasse, einen Eigenschaftenleser, einen Parameterleser und unterstützende Enumerationen, mit denen Sie vCard-Daten lesen können, die einer E-Mail-Nachricht zugeordnet sind.