在处理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函数不起作用。