Сортировка писем по полученному времени до обработки C # Outlook - PullRequest
3 голосов
/ 05 сентября 2011

Мне нужно отсортировать свои электронные письма по времени получения, прежде чем обрабатывать их, так как я обрабатываю электронные письма и вводю данные из них в базу данных.

Мне это нужно, чтобы в базу данных помещалось самое новое полученное письмо.перезаписать более старую версию (если есть более старая версия).

Microsoft.Office.Interop.Outlook.Items item = (Outlook.Items) source.Items;

Источник - это папка с электронными письмами, которые я хотел отсортировать

Я пробовал эти четыре способа:

            items.Sort("ReceivedTime", false);
            items.Sort("[ReceivedTime]", Outlook.OlSortOrder.olAscending);
            items.Sort("ReceivedTime", Outlook.OlSortOrder.olSortNone);
            items.Sort("[ReceivedTime]");

, которые, кажется, не сортируют его какпо-прежнему помещает самую старую в базу данных секунду, перезаписывая новейшую отправку.

Любые идеи?

Ответы [ 4 ]

5 голосов
/ 08 июля 2014

Я потратил так много времени, пытаясь выяснить ту же проблему.

Похоже, в Microsoft Interop.outlook есть какая-то ошибка, которая, если вы пытаетесь выполнить сортировку напрямую из папки, не работает вообще.

</p>

<p>Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 
  Microsoft.Office.Interop.Outlook._NameSpace ns = app.GetNamespace("MAPI");
        Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
  inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);</p>

<pre><code>        inboxFolder.Items.Sort("[ReceivedTime]", false);
        foreach (var item in inboxFolder.Items)
        {
            // ITEMS ARE NOT SORTED
        }
</code>

Чтобы это работало, вы должны скопировать их в другой список и затем отсортировать. Пример ниже будет работать.

Outlook.Application app = new Outlook.Application(); Outlook.NameSpace outlookNs = app.GetNamespace("MAPI"); Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); Outlook.Items myItems = emailFolder.Items; myItems.Sort("[ReceivedTime]", false); foreach (var item in myItems) { var itemObj = item as MailItem; if (itemObj != null) { // This time it will work } }
4 голосов
/ 12 февраля 2012

это должно быть

items.Sort("[ReceivedTime]", false);

или true, если вы хотите, чтобы они по убыванию

0 голосов
/ 29 января 2018
Sub SortByDueDate() 
 Dim myNameSpace As Outlook.NameSpace 
 Dim myFolder As Outlook.Folder 
 Dim myItem As Outlook.TaskItem 
 Dim myItems As Outlook.Items 

 Set myNameSpace = Application.GetNamespace("MAPI") 
 Set myFolder = myNameSpace.GetDefaultFolder(olFolderTasks) 
 Set myItems = myFolder.Items 
 myItems.Sort "[DueDate]", False 
 For Each myItem In myItems 
 MsgBox myItem.Subject &; "-- " &; myItem.DueDate 
 Next myItem 
End Sub

Этот код взят из MSDN. Я не понимаю, почему в начале он устанавливает myItmes=myFolder.Items. Попробовав много раз, я знаю, что это ловушка. Если вы используете myFolder.Items.sort ... напрямую, функция сортировки не работает.

0 голосов
/ 05 сентября 2011

Теперь я не знаю, к какому классу относится ваш item-Object, но, возможно, у метода "Sort" нет типа возврата "void", но он сам возвращает новый список.

Так что выследует назначить свой список следующим образом:

items = items.Sort();

Затем вы можете попробовать, какой из четырех подходов соответствует вашим потребностям.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...