如何在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封邮件。
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)
)