在处理C#Outlook之前按接收时间对电子邮件进行排序
我需要在处理电子邮件并将数据输入数据库之前,按收到的时间对电子邮件进行排序 我需要它,以便将收到的最新电子邮件放入数据库以覆盖旧版本(如果有旧版本)在处理C#Outlook之前按接收时间对电子邮件进行排序,c#,sorting,date,outlook,C#,Sorting,Date,Outlook,我需要在处理电子邮件并将数据输入数据库之前,按收到的时间对电子邮件进行排序 我需要它,以便将收到的最新电子邮件放入数据库以覆盖旧版本(如果有旧版本) Microsoft.Office.Interop.Outlook.Items item=(Outlook.Items)source.Items Source是一个文件夹,里面有我想要排序的电子邮件 我试过以下四种方法: items.Sort("ReceivedTime", false); items.
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]");
它似乎没有对它进行排序,因为它仍然将最旧的文件放在数据库中,然后覆盖最新提交的文件
有什么想法吗?现在我不知道您的item对象是什么类,但可能“Sort”-方法没有返回类型“void”,但它本身返回一个新列表 因此,您应该这样分配您的列表:
items = items.Sort();
然后,您可以尝试四种方法中的哪一种适合您的需要。
我希望这有帮助 应该是
items.Sort("[ReceivedTime]", false);
或者
true
如果你想让它们下降我花了很多时间试图解决同样的问题
Microsoft Interop.outlook中似乎存在某种缺陷,如果您直接尝试从文件夹中排序,则根本不起作用
要使其工作,您必须将它们复制到不同的列表中,然后进行排序。下面的示例将起作用
Outlook.Application app=新建Outlook.Application();
Outlook.NameSpace outlookNs=app.GetNamespace(“MAPI”);
Outlook.MAPIFolder emailFolder=outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items myItems=emailFolder.Items;
排序(“[ReceivedTime]”,false);
foreach(myItems中的var项)
{
var itemObj=作为邮件项目的项目;
if(itemObj!=null)
{
//这一次它会起作用
}
}
此代码来自MSDN。我不明白为什么一开始它会设置
myItmes=myFolder.Items
。经过多次尝试,我知道这是一个陷阱。如果使用myFolder.Items.sort
。。。直接而言,排序功能不起作用 Microsoft.Office.Interop.Outlook.Items item=(Outlook.Items)source.Items;Source是一个文件夹,里面有我想要排序的电子邮件。因此,这将无法工作,因为排序需要参数。在Items对象的一个实例上调用'inboxFolder.Items.Sort',然后通过不同对象的项循环('foreach(inboxFolder.Items中的var item')。将inboxFolder.Items的值存储在单独的变量中,对其调用Sort,然后循环遍历其元素。正确。我也是这么想的。请去掉那些固执己见的评论,直接回答问题好吗?
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 }
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