2016-10-06 3 views
0

Существует около 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 папок и сравнивает возраст почты, а затем удаляет.
  • Некоторые из папок сбой из-за проблемы с доступом. Поэтому мне нужно добавить идентификатор в начале кода, который имеет доступ ко всем этим общим папкам и может быть использован для удаления. В настоящее время он принимает идентификатор по умолчанию, который запускает исполняемый файл.

ответ

0

Никогда не перебрать все элемента в папке - использовать Items.Find/FindNext из Items.Restrict с запросом на ReceivedTime имущества, являющегося меньше некоторого значения.

+0

Спасибо, Дмитрий за предложение. Я устал, используя Items.Find/FindNext, как показано ниже, но элементы не распознаются. Не могли бы вы предложить, что может быть неправильно с приведенным ниже кодом. Я получаю исключение как «resultItem.ReceivedTime \t» ((Microsoft.Office.Interop.Outlook._MailItem) (resultItem)) 'является нулевым \t System.DateTime' – Arund

+0

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

+0

Это недействительное условие. Вам нужно что-то вроде «[ReceivedTime]> '10/7/2016» –