[英]Issue in processing Unread mails and mark it as read after processing
我正在編寫代碼以訪問Outlook並逐一處理未讀郵件並將其標記為已讀(因此它將不會在同一封郵件上運行)。
問題是它無法讀取所有未讀郵件。 (例如)假設我在收件箱中有10封郵件,但僅適用於5封郵件。 它僅處理一半的郵件計數。
標記為已讀后,計數減少,但是forloop不會為所有未讀郵件進行迭代,從而跳過郵件
我這樣寫:
Outlook.Application outlookApp = new Outlook.Application();
Outlook._NameSpace oNS;
Outlook.MAPIFolder oFolder;
Outlook._Explorer oExp;
outlookApp = new Outlook.Application();
oNS = (Outlook._NameSpace)outlookApp.GetNamespace("MAPI");
oFolder = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
oExp = oFolder.GetExplorer(false);
oNS.Logon(Missing.Value, Missing.Value, false, true);
Outlook.Items items = oFolder.Items.Restrict("[Unread]=true");
int mailcount = items.Count;
foreach (Microsoft.Office.Interop.Outlook.MailItem mailItem in oFolder.Items)
{
if (mailItem.UnRead) // I only process the mail if unread
{
Console.WriteLine("Accounts: {0}", mailItem.Subject);
mailItem.UnRead = false;
}
}
我是否有任何遺漏?您能幫忙嗎?
每次將一項標記為已讀時,“項”集合都會受到影響(減少),這就是問題所在。
OutLook.Application oApp;
OutLook._NameSpace oNS;
OutLook.MAPIFolder oFolder;
OutLook._Explorer oExp;
oApp = new OutLook.Application();
oNS = (OutLook._NameSpace)oApp.GetNamespace("MAPI");
oFolder = oNS.GetDefaultFolder(OutLook.OlDefaultFolders.olFolderInbox);
oExp = oFolder.GetExplorer(false);
oNS.Logon(Missing.Value, Missing.Value, false, true);
OutLook.Items items = oFolder.Items.Restrict("[Unread]=true");
// Switched to for, https://stackoverflow.com/questions/4317850/do-i-need-to-release-the-com-object-on-every-foreach-iteration#4317878
for (int i = items.Count; i >= 1; i--)
{
var mail = items[i];
if (mail.UnRead)
{
mail.UnRead = false;
mail.Save();
}
Marshal.ReleaseComObject(mail);
}
Marshal.ReleaseComObject(items);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.