如何在C#中使用Imap客户端接收前100封邮件

时间:2013-06-01 12:18:52

标签: c# imap

我在Gmail上有一个帐户,收件箱邮箱文件夹中包含12,000封邮件。 我的问题是我只想收到前100条邮件,我试了很多但是我失败了。 这是代码

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

这样我就要等待所有12,000封邮件。

2 个答案:

答案 0 :(得分:0)

int maxCount = 200;

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

答案 1 :(得分: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]);
}

请注意,这仍会下载所有12,000个标题,但只会删除前100个标题的内容(如果这是一个问题,请为我们提供指向ImapClient文档的链接,以便我们找到更好的方法) 。另请注意,如果标题是无序的,您将收到一组不可预测的电子邮件,并且您可能希望首先执行OrderBy。 (例如tmp.OrderByDescending(x=>x.Date).Take(100)