[英]How to get a list of UIDs in reverse order with MailKit?
我想使用 MailKit 從收件箱中獲取最新的 100 個 UID。 我正在訪問一個似乎不支持 SORT 擴展的 Gmail 郵箱,因此我無法使用 OrderBy。
這是我的代碼。 問題是它似乎檢索最舊的 100 封電子郵件,而不是最新的(這是我希望它工作的方式)。 有沒有辦法做到這一點?
選項 A - 看起來很有希望只獲取 100 個最舊的電子郵件 UID,而我想要 100 個最新的:
imap.Inbox.Open(FolderAccess.ReadOnly);
var orderBy = new [] { OrderBy.ReverseArrival };
var items = imap.Inbox.Fetch(0, limit, MessageSummaryItems.UniqueId);
選項 B - 按日期順序獲取所有UID(但無論如何不適用於 Gmail):
imap.Inbox.Open(FolderAccess.ReadOnly);
var orderBy = new [] { OrderBy.ReverseArrival };
SearchQuery query = SearchQuery.All;
var items = imap.Inbox.Search(query, orderBy);
IMAP 服務器不支持 SORT 擴展。
原因是快速掃描郵箱以提高對用戶的響應能力。
您在選項 A 中非常接近,您只是對前 2 個參數使用了錯誤的值。
這就是你想要的:
imap.Inbox.Open (FolderAccess.ReadOnly);
if (imap.Inbox.Count > 0) {
// fetch the UIDs of the newest 100 messages
int index = Math.Max (imap.Inbox.Count - 100, 0);
var items = imap.Inbox.Fetch (index, -1, MessageSummaryItems.UniqueId);
...
}
IMailFolder.Fetch (int, int, MessageSummaryItems)
工作方式是第一個 int 參數是第一個消息索引,第二個參數是范圍內的最后一個消息索引( -1
是一個特殊情況,僅表示“最后一個文件夾中的消息”)。
因為一旦我們打開文件夾,我們就可以使用IMailFolder.Count
屬性來獲取文件夾中的郵件總數,我們可以使用它從末尾向后計數以獲得我們的起始索引。 我們想要最后 100 個,所以我們可以執行folder.Count - 100
。 如果文件夾中的郵件數小於 100,我們使用Math.Max()
來確保我們不會得到負值。
希望有幫助。
如果你想單獨下載每個消息,你可以做一些像這樣簡單的事情。
for (int i = inbox.Count-1; i > inbox.Count-101; i--)
{
var message = inbox.GetMessage(i);
Console.WriteLine($"Subject: {message.Subject}");
}
如果您想在一個請求中接收所有內容,請嘗試此操作。
var lastHundredMessages = Enumerable.Range(inbox.Count - 100, 100).ToList();
var messages = inbox.Fetch(lastHundredMessages, MailKit.MessageSummaryItems.UniqueId);
foreach (var message in messages)
{
//To something here with this
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.