在处理C#Outlook之前按接收时间对电子邮件进行排序

Mac*_*Mac 4 c# sorting outlook date

在处理电子邮件并将数据输入数据库时​​,我需要按处理时间对收到的电子邮件进行排序.

我需要它,以便将要接收的最新电子邮件放入数据库以覆盖旧版本(如果有旧版本).

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

Source是包含我想要排序的电子邮件的文件夹

我试过这四种方式:

            items.Sort("ReceivedTime", false);
            items.Sort("[ReceivedTime]", Outlook.OlSortOrder.olAscending);
            items.Sort("ReceivedTime", Outlook.OlSortOrder.olSortNone);
            items.Sort("[ReceivedTime]");
Run Code Online (Sandbox Code Playgroud)

这似乎没有把它排序为它仍然将最老的数据库放入数据库第二,覆盖最新的提交.

有任何想法吗?

Val*_*Val 5

它应该是

items.Sort("[ReceivedTime]", false);
Run Code Online (Sandbox Code Playgroud)

或者true如果您希望它们降序


Man*_*nan 5

我花了很多时间试图找出同样的问题.

看来Microsoft Interop.outlook中存在某种错误,如果你直接尝试从文件夹中排序它根本不起作用.

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);

        inboxFolder.Items.Sort("[ReceivedTime]", false);
        foreach (var item in inboxFolder.Items)
        {
            // ITEMS ARE NOT SORTED
        }
Run Code Online (Sandbox Code Playgroud)

要使其工作,您必须将它们复制到不同的列表中然后排序.以下示例将起作用.

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 } }