Solved

Need Help with outlook redemption

Posted on 2008-06-13
14
664 Views
Last Modified: 2012-06-21
I have put together this code to check unread emails using redemptiom.Everything works fine I just need to restrict the messages to unread=true but i am having a problem.I need the experts.
Public Sub TestRedemption()
     Dim oSession As New Redemption.rdoSession
        Dim objFolder As Redemption.RDOFolder
        Dim oItems As Object
        Dim oItem As Redemption.RDOMail
        Dim att_Ment As Object
 
Dim sMessageBody As String
Dim sSubject As String
Dim sPriority As Integer

      oSession.Logon , , , False, False
                   Set objFolder = oSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox)
                 '   Set oItems = objFolder.Items.Restrict("[UnRead] =true")<<<< having trouble with this line
Set oItems = objFolder.Items

            For Each oItem In oItems
                If (oItem.Unread) Then
                sMessageBody = oItem.Body
                  sSubject = "From:" & oItem.Sender & vbCrLf & "To:" & oItem.To & vbCrLf & "Subject:" & oItem.Subject
                  sPriority = oItem.Importance
                    'oItem.MarkRead(True)
                    'oItem.Move()
                      If   oItem.Attachments.Count > 0 Then
               Set att_Ment = oItem.Attachments.item(1)
                                     End If
                Else

                End If
            Next
   
            oSession = Nothing
       
            If Not IsNothing(oSession) Then
                If oSession.LoggedOn Then
                    oSession.Logoff
                End If
            End If


End Sub
thanks
0
Comment
Question by:wwstudioinc
  • 6
  • 5
  • 2
  • +1
14 Comments
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 21784727
>but i am having a problem
what problem?
0
 
LVL 10

Expert Comment

by:OnALearningCurve
ID: 21784737
Hi  wwstudioinc,

You have probably already done this but try changing

   If (oItem.Unread) Then

To

   If oItem.Unread = True Then

Hope this helps,

Mark.
0
 

Author Comment

by:wwstudioinc
ID: 21784935
mark i have that line already,the problem is that i don't want to have to be going through the entire mailbox to check for the unread items if the mailbox is large  in size then that can take some time.and angel  Set oItems = objFolder.Items.Restrict("[UnRead] =true") if gives an error
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 21785313
you might want to "search" for the unread emails:
http://www.dimastr.com/redemption/rdo/RDOSearchFolder.htm

the restriction you want to search for:
http://www.dimastr.com/redemption/mapitable.htm#tablefiltering

hope this helps...
0
 
LVL 81

Accepted Solution

by:
zorvek (Kevin Jones) earned 500 total points
ID: 21786541
All fixed up (you needed single quotes around "True"). I also fixed a couple of other VBA syntax errors.

Public Sub TestRedemption()
     Dim oSession As New Redemption.rdoSession
        Dim objFolder As Redemption.RDOFolder
        Dim oItems As Object
        Dim oItem As Redemption.RDOMail
        Dim att_Ment As Object
 
Dim sMessageBody As String
Dim sSubject As String
Dim sPriority As Integer

      oSession.Logon , , , False, False
                   Set objFolder = oSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox)
                    Set oItems = objFolder.Items.Restrict("[UnRead]='true'") ' <<<< having trouble with this line
'Set oItems = objFolder.Items

            For Each oItem In oItems
                If (oItem.UnRead) Then
                sMessageBody = oItem.Body
                  sSubject = "From:" & oItem.Sender & vbCrLf & "To:" & oItem.To & vbCrLf & "Subject:" & oItem.Subject
                  sPriority = oItem.Importance
                    'oItem.MarkRead(True)
                    'oItem.Move()
                      If oItem.Attachments.Count > 0 Then
               Set att_Ment = oItem.Attachments.Item(1)
                                     End If
                Else

                End If
            Next
   
            Set oSession = Nothing
       
            If Not oSession Is Nothing Then
                If oSession.LoggedOn Then
                    oSession.Logoff
                End If
            End If


End Sub

Kevin
0
 

Author Comment

by:wwstudioinc
ID: 21788234
kevin i am getting the same error
0
 
LVL 81

Expert Comment

by:zorvek (Kevin Jones)
ID: 21789235
I tried the above code as-is with unread items, no unread items, and no items at all and the code works every time. I tested with Outlook 2007 and Redemption 4.5.

What is the exact error?

Kevin
0
Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 

Author Comment

by:wwstudioinc
ID: 21789355
kevin you are right i had to update my redemption dll 4.4 to 4.5.Could i specify what inbox eg MSN or Hotmail instead of the default inbox
0
 
LVL 81

Expert Comment

by:zorvek (Kevin Jones)
ID: 21789425
You can specific any folder you want. Here is a help routine that returns the folder object given a folder expressed as a variant array (each element of the array represents a sub-folder inside the previous folder):

   Set OutlookFolderObject = GetOutlookFolder(Array("Inbox", "MSN"))

[Begin Code Segment]

Public Function GetOutlookFolder( _
      ByVal FolderPath As Variant _
   ) As Outlook.Folder
   
   Dim OutlookApplication As Outlook.Application
   Dim OutlookNamespace As Outlook.Namespace
   Dim OutlookFolders As Outlook.Folders
   Dim OutlookFolder As Outlook.Folder
   Dim Index As Long
   
   If Not IsArray(FolderPath) Then
      If Len(FolderPath) = 0 Then Exit Function
      FolderPath = Array(FolderPath)
   End If

   Set OutlookApplication = CreateObject("Outlook.Application")
   Set OutlookNamespace = OutlookApplication.GetNamespace("MAPI")
   On Error Resume Next
   Set OutlookFolder = OutlookNamespace.Folders(FolderPath(LBound(FolderPath)))
   If OutlookFolder Is Nothing Then Exit Function
   For Index = LBound(FolderPath) + 1 To UBound(FolderPath)
      Set OutlookFolder = OutlookFolder.Folders(FolderPath(Index))
      If OutlookFolder Is Nothing Then Exit Function
   Next Index
   On Error GoTo 0
   
   Set GetOutlookFolder = OutlookFolder

End Function

[End Code Segment]

Kevin
0
 
LVL 81

Expert Comment

by:zorvek (Kevin Jones)
ID: 21789435
In the above example I made a mistake. The array passed to GetOutlookFolder must always start with the root folder or account name:

   Set OutlookFolderObject = GetOutlookFolder(Array("Personal Folders", "Inbox", "MSN"))

Kevin
0
 

Author Comment

by:wwstudioinc
ID: 21789673
kevin i really appreciate you taking the time now how can we include the msn mailbox into what you did  before thanks then i'll be set
Public Sub TestRedemption()
     Dim oSession As New Redemption.rdoSession
        Dim objFolder As Redemption.RDOFolder
        Dim oItems As Object
        Dim oItem As Redemption.RDOMail
        Dim att_Ment As Object
 
Dim sMessageBody As String
Dim sSubject As String
Dim sPriority As Integer

      oSession.Logon , , , False, False
                   Set objFolder = oSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox)'<<< i would like this to be msn or hotmail which ever i choose
                    Set oItems = objFolder.Items.Restrict("[UnRead]='true'")
'Set oItems = objFolder.Items

            For Each oItem In oItems
                If (oItem.UnRead) Then
                sMessageBody = oItem.Body
                  sSubject = "From:" & oItem.Sender & vbCrLf & "To:" & oItem.To & vbCrLf & "Subject:" & oItem.Subject
                  sPriority = oItem.Importance
                    'oItem.MarkRead(True)
                    'oItem.Move()
                      If oItem.Attachments.Count > 0 Then
               Set att_Ment = oItem.Attachments.Item(1)
                                     End If
                Else

                End If
            Next
   
            Set oSession = Nothing
       
            If Not oSession Is Nothing Then
                If oSession.LoggedOn Then
                    oSession.Logoff
                End If
            End If


End Sub
0
 
LVL 81

Expert Comment

by:zorvek (Kevin Jones)
ID: 21789720
Change this line:

Set objFolder = oSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox)

To:

Set objFolder = GetOutlookFolder(Array("Account Name", "Inbox"))

Where "Account Name" is the root folder name such as "Personal Folders". I can't help any more than that as everyone's Outlook folder hierarchy is mostly customized.

Kevin
0
 

Author Closing Comment

by:wwstudioinc
ID: 31467100
thanks for your help kevin  i really appreciate it
0
 

Author Comment

by:wwstudioinc
ID: 21794533
Kevin i got it this
Public Function TestRedemption() As Integer
     Dim oSession As New Redemption.rdoSession
        Dim objFolder As Redemption.RDOFolder
         Dim CdoFolder As Redemption.RDOFolder
        Dim oItems As Object
        Dim oItem As Redemption.RDOMail
        Dim Attach_ment As Object
Dim sMessageBody As String
Dim sSubject As String
Dim sPriority As Integer
    oSession.Logon , , , False, False
     
Set objFolder = oSession.GetFolderFromPath("\\MSN\Inbox")
                           Set oItems = objFolder.Items.Restrict("[UnRead]='True'")
            For Each oItem In oItems
                        If InStr(1, Message_Read, CStr(oItem.EntryID)) = 0 Then
                    Message_Read = Message_Read & CStr(oItem.EntryID) & "-"
                   
                    '// /subject
                              sSubject = "From:" & oItem.Sender & vbCrLf & "To:" & oItem.To & vbCrLf & "Subject:" & oItem.Subject
                               '// /subject
                  sPriority = oItem.Importance
                                      '/// checks for attachments
                                       If Not oItem.Attachments.Count = 0 Then
               Set Attach_ment = oItem.Attachments.item(1)
                     End If
                                End If
     '// count messages
     TestRedemption = TestRedemption + 1
            Next
   
            oSession.Logoff
         
       

End Function
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Not sure what the best email signature size is? Are you worried about email signature image size? Follow this best practice guide.
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
In Microsoft Access, learn different ways of passing a string value within a string argument. Also learn what a “Type Mis-match” error is about.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now