2015-09-23 1 views
0

Ok, jusqu'à présent, je peux afficher le courrier électronique le plus ancien non lu mais pas le plus ancien. Quand je le fais, le programme s'arrête bien sûr.Rechercher et renvoyer le ReceivedTime du courrier électronique le plus ancien à partir de Outlook dans VB.NET

 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 

J'ai modifié les modifications fournies. Il semble que ce n'est pas saisir les dates, mais le programme ne pend pas aussi longtemps que c'était avec la boucle.

Répondre

0

Tout d'abord, ne parcourez pas tous les éléments d'un dossier en boucle. C'est extrêmement inefficace. Utilisez Items.Find/FindNext/Restreindre.

Dans votre cas (le plus ancien e-mail), utilisez Items.Sort:

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

Si vous ne souhaitez que les plus anciens e-mails non lus, utilisez restrict:

set vItems = objFolder.Items.Restrict("[Unread] = true ") 
vItems.Sort "ReceivedTime", false 'ascending order 
set vOlderItems = vItems.GetFirst 
+0

La boucle est pour les courriels non lus, donc je devrais aller de l'avant et faire cela pour les non lus aussi bien. Parce qu'à la fin j'ai besoin du plus ancien non lu et le plus ancien – Morrg

+0

Si vous voulez seulement des messages non lus, voyez la réponse mise à jour ci-dessus. –

+0

Donc, je peux simplement utiliser ces deux et changer les noms des variables parce que je dois les attraper tous les deux et les utiliser dans le même processus. – Morrg

0

Merci à Dmitry il travaille avec les changements suivants

 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