如何在c#中使用Imap Client接收前100个邮件消息

本文关键字:100个 消息 Client Imap | 更新日期: 2023-09-27 18:16:27

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

如何在c#中使用Imap Client接收前100个邮件消息

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

现在是使用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))