?
Solved

Need Help with outlook redemption

Posted on 2008-06-13
14
Medium Priority
?
700 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 5
  • 2
  • +1
14 Comments
 
LVL 143

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
Does Your Cloud Backup Use Blockchain Technology?

Blockchain technology has already revolutionized finance thanks to Bitcoin. Now it's disrupting other areas, including the realm of data protection. Learn how blockchain is now being used to authenticate backup files and keep them safe from hackers.

 
LVL 143

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 2000 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
 

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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Outlook for dependable use in a very small business   This article is about using the Outlook application (part of Microsoft Office) in a very small business, or for homeowners where dependability and reliability are critical requirements. This …
If you troubleshoot Outlook for clients, you may want to know a bit more about the OST file before doing your next job. IMAP can cause a lot of drama if removed in the accounts without backing up.
CodeTwo Sync for iCloud (http://www.codetwo.com/sync-for-icloud?sts=6554) automatically synchronizes your Outlook 2016, 2013, 2010 or 2007 folders with iCloud folders available via iCloud Control Panel. This lets you automatically sync them with…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Suggested Courses

765 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