Solved

Outlook rule does not always work

Posted on 2013-01-05
2
441 Views
Last Modified: 2013-01-10
I made a code for Outlook 2010 with an Exchange Server at work. I put the script in ThisOutlookSession.
The rule do the following:
Check incoming mail, from address1 or address2, with the words 'word1' or 'word2' in the topic or text, with an attachment, only at this computer, move the email to a subfolder, run script Projekt1.ThisOutlookSession.SaveAllAttachments and mark it as read.

The code save the attachment as a picture, with the name depending on which time it arrive to Outlook. Then it is printed with irfanview.
The code is here below.

The rule and code works fine most of the time, but sometimes it fails. This happen mostly in the middle of the night, so it is hard to know what happen. When it fails it becomes deactivated.

What can be wrong?


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub SaveAllAttachments(objitem As MailItem)

    Dim objAttachments As Outlook.Attachments
   Dim strName, strLocation As String
   Dim dblCount, dblLoop As Double

    strLocation = "N:\KARTOR\ANALYS\" ' Ändra till analyskartorkatalogen
   On Error GoTo ExitSub
    If objitem.Class = olMail Then
       Set objAttachments = objitem.Attachments
       dblCount = objAttachments.Count
       If dblCount <= 0 Then
         GoTo 100
       End If

       For dblLoop = 1 To dblCount
                 ' strID = Format(Time, "hh")           'Get the current Time in hours
                   strID = Format(objitem.SentOn, "hh")  'Get the time the mail was sent on
                   'strID = strID & " at " & Format(Time, "hh`mm AMPM") 'Append the Time
                   If strID > 0 And strID <= 6 Then
                     filnamn = "00"
                   End If
                   If strID > 6 And strID <= 12 Then
                     filnamn = "06"
                   End If
                   If strID > 12 And strID <= 18 Then
                     filnamn = "12"
                   End If
                   If strID > 18 Or strID = 0 Then
                     filnamn = "18"
                   End If
 
                  strName = objAttachments.Item(dblLoop).FileName 'Get attachment name
                   strExt = Right$(strName, 4)                     'Store file Extension
                   strName = Left$(strName, Len(strName) - 4)      'Remove file Extension
                   ' strName = strName & strID & strExt              'Reattach Extension
                   ' Tell the script where to save it and
                   ' what to call it
                   strName = strLocation & filnamn & ".jpg"                'Put it all together

                    ' Save the attachment as a file.
                   objAttachments.Item(dblLoop).SaveAsFile strName

                    strCommand = "C:\program files\irfanview\i_view32.exe " & strName & " /print=\\lpcluster4\printer-st1"

                    Dim myApp As Double
                   myApp = Shell(strCommand, vbHide)
        Next dblLoop
       ' objitem.Delete
   End If

100
ExitSub:
   Set objAttachments = Nothing
   Set objOutlook = Nothing
   End Sub
0
Comment
Question by:anderswen
2 Comments
 
LVL 18

Accepted Solution

by:
Andrej Pirman earned 500 total points
Comment Utility
Don't know about the code, but if it fails usually in the middle of the night, it might be that some of used mechanisms are locked due to BACKUP.

I'd put some debug logging into the script:
- upon execution, write TIME into log file
- then each step, write a line to log file

When next time it will wail, you'll have time and steps in log. Examine Windows Event logs (application and system events) and compare times of failure. You might conclude something useful out of it.
0
 

Author Closing Comment

by:anderswen
Comment Utility
Thanks, I have done this, and I have also changed the directory it is saved to from the network server to the local disk, and it is transferred later on by a scheduled task to the network server. It has not gone wrong so far. I have also put on logging on Outlook so I am eager to see what can be wrong.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Set OWA language and time zone in Exchange for individuals, all users or per database.
Resolve Outlook connectivity issues after moving mailbox to new Exchange 2016 server
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
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 …

771 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