Elegante Methode zum Serialisieren eines MailMessage-Objekts in .NET

7

Ich untersuche gerade ein MailMessage-Objekt in C #, und obwohl es ein paar Variationen eines Beispiels im Netz gibt, serialisieren sie zu einer Binärdatei, die den Punkt IMO vermisst.

Mein Ansatz ist, dass ich eine MailMessage in eine RFC2822 eml-Zeichenfolge serialisieren möchte und der folgende Code ist, was ich mir ausgedacht habe.

%Vor%

Es ist ziemlich eklig, aber es funktioniert. Idealerweise würde ich einen neuen SMTPClient erstellen und eine Serialize-Funktion hinzufügen, die die rfc822-Zeichenfolge automatisch zurückgibt, ohne dass sie jemals das Dateisystem trifft.

Da ich nicht in der Lage bin, mit Visual Studio in die SMTPClient.Send-Funktion zu gelangen, ist diese "ideale" Vorgehensweise etwas knifflig.

Ich habe bereits die Deserialisierung der RFC-Nachricht durch Hinzufügen einiger kleiner Änderungen in den POP3MimeClient- und POP3MailClient-Klassen von Peter Huber aussortiert, so dass ich eine Datei auf der Festplatte oder eine Zeichenfolge in eine MailMessage deserialisieren kann.

Die Sache, die mich nervt, ist, dass ich wirklich in der Lage sein sollte, die MailMessage mithilfe eines Streams zu serialisieren und den Stream in eine string -oder- Datei meiner Wahl zu schreiben, anstatt die Häuser zu durchsuchen, um GUID-basierte Ordner zu erstellen Code oben tut und liest den Inhalt der Datei zurück in eine Zeichenfolge ...

Irgendwelche Hinweise darauf, wie ich das eleganter machen könnte, werden sehr geschätzt.

Danke.

    
PaulV 11.09.2013, 15:31
quelle

2 Antworten

19

Das wird ein Hack sein. Vergessen Sie nicht, MS kann es in den nächsten Versionen von .Net ändern.

(Mit Hilfe von ILSpy) können Sie eine Erweiterungsmethode wie folgt schreiben

%Vor%

und als

verwenden %Vor%     
I4V 11.09.2013, 16:09
quelle
0

Endlich habe ich es geschafft, die MailMessage nach einer Menge Arbeit zu deserialisieren:

Um es richtig zu machen, habe ich eine DLL erstellt, die sowohl in der Client-Anwendung als auch im Webservice verwendet wird. Dies muss derselbe sein, damit die Deserialisierung funktioniert:)

Ich habe die DLL-Serialisierungsklassen hier ausgewählt: Ссылка

Vielen Dank für das Teilen!

Sobald kompiliert und meine neue DLL den Projekten hinzugefügt wurde, funktioniert das Senden und Empfangen.

Also konvertiere ich die MailMessage folgendermaßen: string serializedMessage = SerializeAsBase64 (mail); und im Webservice rekonstruiere ich es so: MailMessage Mm = DeserializeFromBase64 (serializedMessage);

Ich hoffe, das hilft ...

    
Kemboi 13.03.2018 18:17
quelle