2014-03-06 68 views
1

我捆绑使用MailSystem.NET阅读所有邮件(在草稿中,除了东西,我猜),并提取UUID,日期,发件人,所有收件人的电子邮件。高效FETCH查询和分析结果

我想从最近一次开始读取数据,然后继续向后扫描,一次加载大概100个标头。

如果在此操作过程中有新电子邮件进入,我不希望邮件索引更改影响进度。

我想就此提出一些建议。在我看来,Fetch()包装器对单个消息起作用,并且收件箱搜索功能给出了消息索引序号而不是UID。我相信UID对于并发活动会更加强大。

我可以调用imap.Command(“fetch 1:100(uid rfc822.header)”),但后来我不知道如何使用MailSystem.NET来解析结果。

此外,有没有办法说“得与UID的下一个100级的消息不到最后看到UID”?如果可以肯定的是UID总是随着后来的消息而增加。我的意思是这是根据消息索引序号的替代方案。

谢谢!

回答

0

我不能回答使用MailSystem.NET你的问题,但我可以用一个更好的C#IMAP库回答这个问题:MailKit

using System; 

using MailKit.Net.Imap; 
using MailKit; 
using MimeKit; 

namespace TestClient { 
    class Program 
    { 
     public static void Main (string[] args) 
     { 
      using (var client = new ImapClient()) { 
       client.Connect ("imap.friends.com", 993, true); 

       // Note: since we don't have an OAuth2 token, disable 
       // the XOAUTH2 authentication mechanism. 
       client.AuthenticationMechanisms.Remove ("XOAUTH"); 

       client.Authenticate ("joey", "password"); 

       // The Inbox folder is always available on all IMAP servers... 
       client.Inbox.Open (FolderAccess.ReadOnly); 

       // Note: The envelope contains the date and all of the email addresses 
       var items = MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope; 
       int upper = client.Inbox.Count - 1; 
       int lower = Math.Max (upper - 100, 0); 

       while (lower <= upper) { 
        foreach (var message in client.Inbox.Fetch (lower, upper, items)) { 
         Console.WriteLine ("Sender: {0}", message.Envelope.Sender); 
         Console.WriteLine ("From: {0}", message.Envelope.From); 
         Console.WriteLine ("To: {0}", message.Envelope.To); 
         Console.WriteLine ("Cc: {0}", message.Envelope.Cc); 
         if (message.Envelope.Date.HasValue) 
          Console.WriteLine ("Date: {0}", message.Envelope.Date.Value); 
        } 

        upper = lower - 1; 
        lower = Math.Max (upper - 100, 0); 
       } 

       client.Disconnect (true); 
      } 
     } 
    } 
} 
+0

995是imap的奇数端口号... – arnt

+0

对不起,是的,我打算输入993 – jstedfast