Frage

Ich schreibe ein C # Programm, das verarbeitet und leitet E-Mails. Ich habe eine POP3-Bibliothek und einen MIME-Parser, und ich brauche den MIME-Baum in eine System.Net.Mail.MailMessage zu kopieren.

Was ist der beste Weg, verschiedene MIME Teile AlternateViews, LinkedResources und Attachments abzubilden?

Bearbeiten : Das funktioniert mit allen Mail-Clients (sowohl das Senden und Empfangen)

War es hilfreich?

Lösung 3

Im Moment, ich bin zu kopieren alles mit einem Content-Disposition, die nicht inline ist, oder mit einer MIME-Kategorie von etwas anderes als Text oder Bild, auf einen Attachment, etwas inline, oder irgendetwas mit einer MIME-Kategorie von Image auf einem LinkedResource auf der HTML-Ansicht oder der letzte Blick, und alles andere als AlternateView. (Ich habe dies noch nicht getestet)

Andere Tipps

Aus 10,000ft Übersicht, hier ist was ich tun würde.

Flatten Mime Teile in einen Baum. Stellen Sie sicher, dass jeder Teil 1 enthält, und nur 1 Teil (nicht einen Elternteil wie ein multipart / related oder so ähnlich).

  1. Überprüfen Sie die folgenden Bedingungen für den Körper:

    1. Wenn der erste Teil HTML ist, stellen Sie es auf den Körper der Nachricht

    2. Wenn der erste Teil ist Klartext, und der zweite Teil ist nicht html, stellen Sie den Klartextteil an dem Körper der Nachricht.

    3. Wenn der erste Teil glatt ist, und der zweite Teil ist html, erstellen 2 alternative Ansichten. *** Dies setzt voraus, keines dieser Teile hat eine Content-Disposition:. Anlageheader

  2. Schleife durch den Rest der Teile. Fügen Sie alles andere als eine Anlage, mit der Ausnahme

    1. Bilder, die einen Content-ID-Header gesetzt haben, oder

    2. Bilder, die einen Content-Location-Header gesetzt haben.

      Wenn einer dieser Header vorhanden ist, dann würde ich diese Bilder in als LinkedResource (nur wenn es tatsächlich ein HTML Körperteil ist).

Das sollten Sie den Einstieg, und etwa 99% der normalen E-Mail-Abdeckung gibt.

Karte beliebigen Textteil (text / plain text / html etc.), die in einem multipart / alternative Teil zu einem Alternate enthalten ist. Karte auch die erste Textteil zu einem Alternate angetroffen wird, unabhängig von dessen Typ, nur für den Fall der Nachricht aus einem einzelnen Textteil gerecht zu werden.

Ordnen Sie die restlichen Teile eine Anlage oder einen LinkedResource, abhängig von den Content-Disposition-Header.

Karte der Teile mit einer Content-Disposition der Befestigung, an eine Anlage.

Karte der Teile mit einer Content-Disposition von Inline oder ohne Content-Disposition-Header zu einem LinkedResource. Dieser letzte Schritt finessed werden könnte, indem die Überprüfung, dass die Content-ID eine Content-ID angepasst von einem bestimmten Textteil bezeichnet, aber für praktische Zwecke, könnte man davon ausgehen, dass alle LinkedResources auf diese Weise geschaffen, um den ersten text / html Alternate gehören (oder die letzte Alternate erstellt, wenn es keine Alternate vom Typ text / html).

Könnte nicht der beste Weg sein, aber ich würde versuchen, die ‚raw‘ E-Mail zu erhalten und ersetzen Sie einfach auf die zu mit der neuen E-Mail

Hmmmm, brauchen Sie unbedingt System.Net.Mail.MailMessage benutzen?

System.Net.Mail.MailMessage bietet nur einen sehr kleinen Teil von dem, was MIME Angebote. Also, wenn Ihr MIME-Parser zum Ziel, alle / die meisten Standard-Features dann Ihr Ziel Kopieren einer MIME-Nachricht in Mailmessage unterstützt wird am besten und im schlimmsten Fall unmöglich schwierig sein. Nicht die Bibliothek, der POP3-Zugriff auch SMTP-Zugang zur Verfügung stellen? Wenn ja, würde ich System.Net.Mail.MailMessage allein lassen und gehe mit dem, was der thrid Party-Bibliothek zur Verfügung stellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top