Solved

Need Help with outlook redemption

Posted on 2008-06-13
14
670 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
Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

 
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
 

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

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

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

Finding original email is quite difficult due to their duplicates. From this article, you will come to know why multiple duplicates of same emails appear and how to delete duplicate emails from Outlook securely and instantly while vital emails remai…
Large Outlook files lead to various unwanted errors and corruption issues. Furthermore, large outlook files can also make Outlook take longer to start-up, search, navigate, and shut-down. So, In this article, i will discuss a method to make your Out…
With Microsoft Access, learn how to specify relationships between tables and set various options on the relationship. Add the tables: Create the relationship: Decide if you’re going to set referential integrity: Decide if you want cascade upda…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

803 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