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

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

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

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

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

有任何想法吗?

它应该是

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

如果你想让它们下降,那就是true

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

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

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

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

现在我不知道你的item-Object是什么类,但也许“Sort”-Method没有返回类型“void”,但它本身返回一个新的列表。

所以你应该像这样分配你的列表:

 items = items.Sort(); 

然后,您可以尝试,您的四种方法中的哪一种符合您的需求。 我希望这有帮助!

 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 …,则sort函数不起作用。