0

我有一个 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 封邮件。

4

2 回答 2

0

这看起来是使用 LINQTake扩展方法的好时机:

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)

于 2013-06-01T12:50:08.120 回答
0
int maxCount = 200;

for (int i = 1; i <= maxCount; i++) {
// Your Code here...
}
于 2013-06-01T12:21:06.070 回答