Существует около 15 отдельных общих папок из нескольких общих папок, из которых я удаляю почтовые отправления, которым больше 15 дней. Каждая общая папка имеет около 1000+ писем. Каждую неделю это одинаковое количество предметов. В настоящее время я получаю общедоступную папку по умолчанию и зациклирую каждую из подпапок и удаляя письма.Удаление почтовых отправлений из общих папок Outlook
Microsoft.Office.Interop.Outlook.Folder tempInbox = tempApp.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olPublicFoldersAllPublicFolders) as Microsoft.Office.Interop.Outlook.Folder;
**SOME Code***
foreach (Microsoft.Office.Interop.Outlook.Folder subfolder1 in subfolder.Folders)
{
if ((check those 14 subfolder names)& (subfolder1.Folders.Count > 0))
{
CheckCountries(subfolder1, sw);
}
}
CheckCountries(subfolder1, sw) -> Here I am comparing and deleting the mail items.
//Deletion part of code below
foreach (object todel in delItem)
{
DateTime d1 = DateTime.Now;
Microsoft.Office.Interop.Outlook.MailItem mailitmType = todel as Microsoft.Office.Interop.Outlook.MailItem;
if (mailitmType is Microsoft.Office.Interop.Outlook.MailItem)
{
if ((mailitmType.IsConflict != true) & (mailitmType.MessageClass.Contains("IPM.Note.SMIME") == false))
{
DateTime d2 = mailitmType.ReceivedTime;
if ((d1 - d2).TotalDays > iDays)
{
sw.WriteLine("Deleting Mail with Subject line as = \"" + mailitmType.Subject + "\" and Received time = " + mailitmType.ReceivedTime);
mailitmType.Delete();
iCnt = iCnt + 1;
} //mailitmType.Save();
}
}
}
Я хочу улучшить в следующих областях -
- он принимает почти 5-7 часов, чтобы выполнить это, как он читает через все mailitems (если есть 2000, из которых только 1000 являются > 15 дней) в каждом из 15 папок и сравнивает возраст почты, а затем удаляет.
- Некоторые из папок сбой из-за проблемы с доступом. Поэтому мне нужно добавить идентификатор в начале кода, который имеет доступ ко всем этим общим папкам и может быть использован для удаления. В настоящее время он принимает идентификатор по умолчанию, который запускает исполняемый файл.
Спасибо, Дмитрий за предложение. Я устал, используя Items.Find/FindNext, как показано ниже, но элементы не распознаются. Не могли бы вы предложить, что может быть неправильно с приведенным ниже кодом. Я получаю исключение как «resultItem.ReceivedTime \t» ((Microsoft.Office.Interop.Outlook._MailItem) (resultItem)) 'является нулевым \t System.DateTime' – Arund
Microsoft.Office.Interop.Outlook.MailItem resultItem = delItem как Microsoft.Office.Interop.Outlook.MailItem; resultItem = null; if (delItem.Count> 0) {string filter = "(delItem.ReceivedTime - DateTime.Now) .TotalDays> 15"; resultItem = delItem.Find (фильтр); while (resultItem! = Null) { (resultItem является Microsoft.Office.Interop.Outlook.MailItem) {iCnt ++; sw.WriteLine («Удаление почты с темой Subject as = \" "+ resultItem.Subject +" \ "и Received time =" + resultItem.ReceivedTime); //// resultItem.Delete(); } Marshal.ReleaseComObject (resultItem); resultItem = delItem.FindNext(); – Arund
Это недействительное условие. Вам нужно что-то вроде «[ReceivedTime]> '10/7/2016» –