2013-06-01 60 views
0

我在Gmail上有一個帳戶,收件箱郵箱文件夾中有12,000封郵件。 我的問題是,我只想收到前100封郵件,我嘗試了很多,但是失敗了。 下面的代碼如何接收前100郵件使用Imap客戶端在C#中的郵件

ImapClient go_client = new ImapClient(); 

CompletionResponse go_response = null; 

Mailbox go_Folders_As_Tree = null; 

go_client.Host = "Host"; 
go_client.Port = "port no"; 
go_client.Username = "user id"; 
go_client.Password = "pasword"; 

go_client.SSLInteractionType = EInteractionType.SSLPort; 
go_response = go_client.Login(); 

go_Folders_As_Tree = go_client.GetMailboxTree(); 

Mailbox inbox = Mailbox.Find(go_Folders_As_Tree, "INBOX"); 

MessageCollection tmp = go_client.GetAllMessageHeaders(inbox); 

foreach (ImapMessage msg in tmp) 
     { 
      ImapMessage actual_message = go_client.GetMessageText(msg.UID,  go_Folders_As_Tree.Children[1]); 
     } 

這樣,我必須等待所有我的12000個郵件。

回答

0
int maxCount = 200; 

for (int i = 1; i <= maxCount; i++) { 
// Your Code here... 
} 
+0

,但我們必須爲每封郵件我怎樣才能獲得第一條消息 –

0

這看起來像使用LINQ的Take擴展方法的好時機:

MessageCollection tmp = go_client.GetAllMessageHeaders(inbox); 

foreach (ImapMessage msg in tmp.Take(100)) 
{ 
    ImapMessage actual_message = go_client.GetMessageText(msg.UID,  go_Folders_As_Tree.Children[1]); 
} 

注意,這還是下載所有12000頭,但只有前100的內容(如果這是一個問題,給我們一個鏈接到你的ImapClient文件,所以我們可能會找到一個更好的方法)。另請注意,如果標題無序,您將收到一組不可預知的電子郵件,您可能首先需要執行OrderBy。 (如tmp.OrderByDescending(x=>x.Date).Take(100)

+0

的UID,如果我們使用GetMessageHeader方法,而不是GetAllMessageHeaders提供UID,我們必須提供啓動UID和結束UID但問題是,如何能我們收到第一封郵件的UID –

+0

你有沒有試過它?時間可以接受嗎?如果是這樣,你就完成了。如果不是:您使用的是什麼IMAP庫?我希望看到文檔和/或自己嘗試。 –

+0

我正在使用Email.net庫,但沒有獲取第一封郵件的UID的功能。 –

相關問題