2017-10-17 3 views
0

Ich verwende MailKit eine Liste der vollständigen IMessageSummaries wie folgt zu erhalten:Wie bekomme ich MIMEMessage von IMessageSummary?

var allMessages = remoteFolder.Fetch(remoteIndexList, MessageSummaryItems.Full | MessageSummaryItems.Flags | MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure); 

ich in irgendwelchen Optimierungen nicht interessiert bin wie Teile des IMessageSummary usw. herunterzuladen, ich will nur die gesamten Daten, so schnell wie ich es bekommen kann.

aber den oben beschriebenen Ansatz verwenden, kann ich nicht lesen dann richtig den HTML-Code in den Körper der Nachricht, zum Beispiel HtmlPreviewVisitor verwenden, da die Body Eigenschaft IMessageSummary ein BodyPartBasic ist. Ich brauche natürlich das ganze MimeMessage.

Das Problem ist, dass, wenn ich mehrere MimeMessages bekommen möchte, kann ich nicht, ich kann nur eins nach dem anderen mit ImapClient.GetMessage(int index, ...) Methode.

Gibt es eine Möglichkeit alle Teile aus dem ursprünglichen MimeMessage zu extrahieren, die verwendet wurde IMessageSummary zu erstellen und nutzen sie mit HtmlPreviewVisitor ohne jede volle MimeMessage wieder herunterladen zu müssen?

Antwort

1

Was Sie tun müssen, ist:

foreach (var item in allMessages) { 
    var message = remoteFolder.GetMessage (item.UniqueId); 
} 

Die IMessageSummary nicht tatsächlich die Nachricht enthalten oder die Nachricht herunterladen, fragt er nur den IMAP-Server für verschiedene Bits von Metadaten über die Nachricht (wie die Struktur der Nachricht, die Flags wie gelesen/ungelesen, der Absender, Betreff, Datum, an, cc, Antwort-zu, usw.).

Wenn Sie kein Interesse an Abrufen einzelner MIME Teile aus dem IMAP-Server haben, dann könnten Sie einen reduzierten Satz von MessageSummaryItems wie MessageSummaryItems.All | MessageSummaryItems.UniqueId verwenden wollen (ich weiß, scheint All wie es mehr als Full enthalten sollte, aber das ist nicht wie die IMAP-Aliase funktionieren ...).

Sie können die MessageSummaryItems, die Sie anfordern, sogar noch weiter reduzieren, je nachdem, welche Daten Sie verwenden möchten.

Zum Beispiel, wenn Sie nicht die IMessageSummaryItem.Envelope Eigenschaft verwenden, dann brauchen Sie nicht das MessageSummaryItems.Envelope Flag und indem Sie es nicht anfordern, beschleunigen Sie die Abfrage, weil der IMAP-Server Sie nicht so viel senden wird Info.

+0

Ja, ich habe herausgefunden, dass ich GetMessage() für jede IMessageSummary verwenden sollte, aber warum gibt es nicht die GetMessages() -Methode, die eine Liste von Nachrichten mit nur einer Anfrage an den IMAP-Server zurückgibt, genau wie Fetch()? – Nevca

+0

Weil das eine Menge Daten ist, die in den Speicher geworfen werden würden. – jstedfast

+0

Dank @jstedfast – Nevca