Solved

Need Help with outlook redemption

Posted on 2008-06-13
14
652 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]
Comment Utility
>but i am having a problem
what problem?
0
 
LVL 10

Expert Comment

by:OnALearningCurve
Comment Utility
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
Comment Utility
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]
Comment Utility
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
Comment Utility
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
Comment Utility
kevin i am getting the same error
0
 
LVL 81

Expert Comment

by:zorvek (Kevin Jones)
Comment Utility
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
Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

 

Author Comment

by:wwstudioinc
Comment Utility
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)
Comment Utility
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)
Comment Utility
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
Comment Utility
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)
Comment Utility
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
Comment Utility
thanks for your help kevin  i really appreciate it
0
 

Author Comment

by:wwstudioinc
Comment Utility
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Learn more about how the humble email signature can be used as more than just an electronic business card. When used correctly, a signature can easily be tailored for different purposes by different departments within an organization.
Create high volume marketing opportunities using email signatures with these top 10 DOs and DON'Ts of email signature marketing.
Basics of query design. Shows you how to construct a simple query by adding tables, perform joins, defining output columns, perform sorting, and apply criteria.
This Experts Exchange video Micro Tutorial shows how to tell Microsoft Office that a word is NOT spelled correctly. Microsoft Office has a built-in, main dictionary that is shared by Office apps, including Excel, Outlook, PowerPoint, and Word. When …

772 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

11 Experts available now in Live!

Get 1:1 Help Now