2016-04-28 1 views
3

mon code est:comment obtenir uid dans 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 
    } 
} 

Je baguette magique pour sauver uid. Comment peut-on faire de l'uid pour un message?

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

Quel paquet utilise-t-il? 'MimeMessage' ne semble pas être le standard C#, donc il serait bien d'ajouter la section' using' pour savoir d'où vient la classe – Draken

+0

ajouter MimeKit, MailKit et MailKit.Net.Imap. – shahroz

+0

En regardant dans le document de classe, il ne semble pas y avoir quelque chose de ce type: http://www.mimekit.net/docs/html/T_MimeKit_MimeMessage.htm, le plus proche que je peux voir est la propriété 'MessageId'. Est-ce ce que vous cherchez? Si non, pour quoi avez-vous besoin de l'uid? – Draken

Répondre

7

la manière d'obtenir l'UID d'un message particulier à l'aide MailKit est d'utiliser la méthode Fetch() sur l'instance ImapFolder et transmettre la valeur MessageSummaryItem.UniqueId enum.

En général, vous aurez envie d'obtenir les UIDs des messages dans le dossier avant vous allez chercher le message réel (s), comme suit:

// 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); 
} 

Le Flags inclut des choses comme Seen, Deleted, Answered, etc. L'indicateur Flagged signifie que le message a été marqué comme "important" par l'utilisateur.

1

Voulez-vous profiter de vos commentaires, je pense que vous voulez quelque chose comme ceci:

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 
    } 
} 

Vous pouvez ensuite utiliser dans votre liste et lorsque l'utilisateur sélectionne, vous pouvez renvoyer le message approprié à la correct GUID