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

5

在处理电子邮件并将其中的数据输入数据库之前,我需要按接收时间对它们进行排序。

我需要确保最新接收的电子邮件被放入数据库以覆盖旧版本(如果存在旧版本)。

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个回答

7

应该是这样的

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

如果您想按降序排列它们,或者true


5

我花了很多时间试图解决同样的问题。

似乎Microsoft Interop.outlook存在某种bug,如果直接尝试从文件夹中进行排序,则根本不起作用。

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

(注:以上内容为IT技术相关内容的翻译)
        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) { // 这次会起作用 } } ```

1
在一个Items对象实例上调用'inboxFolder.Items.Sort',而您通过另一个对象中的项('foreach(var item in inboxFolder.Items)')进行循环。请将inboxFolder.Items的值存储在单独的变量中,对其进行排序,然后循环遍历其元素。 - Dmitry Streblechenko
正确。这也是我想的。 - Manan

0

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

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

items = items.Sort();

你可以尝试一下,看看哪种方法适合你的需求。 希望这能帮到你!

Microsoft.Office.Interop.Outlook.Items item = (Outlook.Items)source.Items;源是包含我想要排序的电子邮件的文件夹。由于Sort需要参数,因此这样不起作用。 - Mac

0
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...,排序函数将不起作用。


请删除带有个人观点的评论,直接给出答案。 - Stuart.Sklinar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接