2016-04-28 16 views
3

mein Code:Wie bekomme ich in Mailkit?

using (ImapClient client = new ImapClient()) 
{ 
    // Connect to the server and authentication and then 
    var inbox = client.Inbox; 
    inbox.Open(FolderAccess.ReadOnly); 
    int messageCount = inbox.Count - 1; 
    for (int i = messageCount; i > 0 ; i--) 
    { 
      var visitor = new HtmlPreviewVisitor(); 
      MimeMessage message = inbox.GetMessage(i); 
      message.Accept(visitor); 
      // how can get uid for this message 
    } 
} 

ich uid speichern Stab. Wie kann man eine Nachricht erhalten?

MimeMessage message =inbox.GetMessage(UniqueId.Parse(uid)); 
+0

Welches Paket wird verwendet? 'MimeMessage' scheint nicht Standard-C# zu sein, daher wäre es nett, den' using'-Abschnitt hinzuzufügen, damit wir wissen, woher die Klasse kommt. – Draken

+0

MimeKit, MailKit und MailKit.Net.Imap hinzufügen. – shahroz

+0

Im Klassendokument zu sehen, scheint es nichts von diesem Typ zu geben: http://www.mimekit.net/docs/html/T_MimeKit_MimeMessage.htm, die nächste, die ich sehen kann, ist die Eigenschaft 'MessageId'. Ist das wonach Sie suchen? Wenn nicht, wozu brauchst du die 'uid'? – Draken

Antwort

7

die Art und Weise die UID für eine bestimmte Nachricht mit MailKit zu bekommen, ist die Fetch() Methode auf der ImapFolder Instanz zu verwenden und den MessageSummaryItem.UniqueId enum-Wert übergeben.

Normalerweise sollten Sie die UIDs der Nachrichten im Ordner vor erhalten Sie die aktuelle Nachricht (en) holen, etwa so:

// fetch some useful metadata about each message in the folder... 
var items = folder.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Size | MessageSummaryItems.Flags); 

// iterate over all of the messages and fetch them by UID 
foreach (var item in items) { 
    var message = folder.GetMessage (item.UniqueId); 

    Console.WriteLine ("The message is {0} bytes long", item.Size.Value); 
    Console.WriteLine ("The message has the following flags set: {0}", item.Flags.Value); 
} 

Die Flags gehören Dinge wie Seen, Deleted, Answered usw. Das Flag Flagged bedeutet, dass die Nachricht vom Benutzer als "wichtig" markiert wurde.

1

auf Ihre Kommentare Möchten Sie, ich glaube, Sie so etwas wie dies wollen:

public class MyMessage{ 
    public Guid uid {get; private set;} 
    public MimeMessage message {get; private set;} 

    public MyMessage(MimeMessage message){ 
     this.uid = Guid.NewGuid(); 
     this.message = message 
    } 
} 

Sie können diese dann in Ihrer Liste verwenden und wenn der Benutzer wählt, können Sie die entsprechende Meldung mit der Rückkehr korrekter GUID