代码之家  ›  专栏  ›  技术社区  ›  Morrg

在VB.NET中查找并返回outlook中最旧电子邮件的ReceivedTime

  •  0
  • Morrg  · 技术社区  · 10 年前

    好的,到目前为止,我可以显示最旧的未读邮件,但不能显示最旧邮件的全部内容。当我这样做时,程序当然会停止。

            Dim objOutlook As Outlook._Application
        objOutlook = New Outlook.Application()
        Dim objNS As Outlook._NameSpace = objOutlook.Session
        Dim objRecipient As Outlook.Recipient = _
            objNS.CreateRecipient("John Smith")
       'Dim eMail As Outlook.MailItem
        'Dim travelunreadold As String
        Dim vItems
        Dim vvItems
        Dim vOlderItems
        Dim vOlderunreadItems
    
        If objRecipient.Resolve Then
            Dim objFolder As Outlook.MAPIFolder = _
                objNS.GetSharedDefaultFolder(objRecipient, _
                Outlook.OlDefaultFolders.olFolderInbox)
            txtTravUnread.Text = objFolder.UnReadItemCount
    
            'For Each eMail In objFolder.Items
            '    If eMail.UnRead = True Then
            '        travelunreadold = eMail.ReceivedTime
            '        Txttravundate.Text = travelunreadold
            '    End If
    
            'Next eMail
            vItems = objFolder.Items.Restrict("[Unread] = true")
            vItems.Sort("ReceivedTime", False) 'ascending order
            vOlderunreadItems = vItems.GetFirst
            Txttravundate.Text = vOlderunreadItems
    
            vvItems = objFolder.Items
            vvItems.Sort("ReceivedTime", False) 'ascending order
            vOlderItems = vvItems.GetFirst
            Txttravemdate.Text = vOlderItems
    
            txtTravEmails.Text = objFolder.Items.Count
            'Txttravemdate.Text = oldest.recievedtime
    
        Else
            Console.Write("Recipient could not be resolved.")
        End If
    

    我已经用提供的更改进行了编辑。看起来它没有抓住日期,但是程序并没有像循环那样挂起。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Dmitry Streblechenko    10 年前

    首先,不要循环浏览文件夹中的所有项目。它效率极低。使用Items.Find/FindNext/Restrict。

    在您的情况下(最旧的电子邮件),使用项目。排序:

    set vItems = objFolder.Items
    vItems.Sort "ReceivedTime", false 'ascending order
    set vOlderItems = vItems.GetFirst
    

    如果您只想要最早的未读电子邮件,请使用限制:

    set vItems = objFolder.Items.Restrict("[Unread] = true ")
    vItems.Sort "ReceivedTime", false 'ascending order
    set vOlderItems = vItems.GetFirst
    
        2
  •  0
  •   Morrg    10 年前

    感谢Dmitry,它正在进行以下更改

            Dim objOutlook As Outlook._Application
        objOutlook = New Outlook.Application()
        Dim objNS As Outlook._NameSpace = objOutlook.Session
        Dim objRecipient As Outlook.Recipient = _
            objNS.CreateRecipient("John Smith")
        '  Dim eMail As Outlook.MailItem
        ' Dim travelunreadold As String
        Dim vItems
        Dim vvItems
        Dim vOlderItems
        Dim vOlderunreadItems
    
        If objRecipient.Resolve Then
            Dim objFolder As Outlook.MAPIFolder = _
                objNS.GetSharedDefaultFolder(objRecipient, _
                Outlook.OlDefaultFolders.olFolderInbox)
            txtTravUnread.Text = objFolder.UnReadItemCount
            txtTravEmails.Text = objFolder.Items.Count
            'For Each eMail In objFolder.Items
            '    If eMail.UnRead = True Then
            '        travelunreadold = eMail.ReceivedTime
            '        Txttravundate.Text = travelunreadold
            '    End If
    
            'Next eMail
            vvItems = objFolder.Items
            vvItems.Sort("ReceivedTime", False) 'ascending order
            vOlderItems = vvItems.GetFirst
            Txttravemdate.Text = FormatDateTime(vOlderItems.ReceivedTime, 0)
    
    
            vItems = objFolder.Items.Restrict("[Unread] = true")
            vItems.Sort("ReceivedTime", False) 'ascending order
            vOlderunreadItems = vItems.GetFirst
            Txttravundate.Text = FormatDateTime(vOlderunreadItems.ReceivedTime, 0)
    
    
            'Txttravemdate.Text = oldest.recievedtime
    
        Else
            Console.Write("Recipient could not be resolved.")
        End If
    
    推荐文章