Q:

Outlook Rule will not run script unless manually ran

Whenever I add my script to a rule i have setup in outlook it sets my rule to client-side only.   The rule is used to get a specific word in the subject line and a specific word in the body then move the email to a subfolder of the Inbox then run a script.  The current rule runs when I receive the email by moving the email to the directed folder but the script does not run unless I manually click the rule to run now.   How could I make it to where it would be processed on server side only so I won't have to manually run the rule to run the script.  Here is my script below:
Public Sub Application_NewMail(myMail As MailItem)
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim dbName As String
dbName = "M:\CRM\Custom CRM\CRM.accdb"
Set con = New ADODB.Connection

con. ConnectionString = _
    "Provider = Microsoft. ACE.OLEDB.12.0; " & _
    "Data Source = " & dbName & "; " & _
    "Persist Security Info = False; " & _
    "Mode = readwrite;"

con. Open

' Create 2 recordset objects for data manipulation throughout the project
Set rs = New ADODB.Recordset

With rs
    .CursorLocation = adUseClient
    .ActiveConnection = con
    .CursorType = adOpenDynamic
    .LockType = adLockOptimistic
End With

  Dim ns As Outlook. NameSpace
  Dim InBoxFolder As MAPIFolder
  Dim InBoxItem As Object 'MailItem
  Dim Contents As String, Delimiter As String
  Dim Prop, Result
  Dim i As Long, j As Long, k As Long

  Dim myOlApp As Object
  Set myOlApp = CreateObject("Outlook. Application")

  'Setup an array with all properties that can be found in the mail
  Prop = Array("Name", "Email", "Phone", "I am an")
  'The delimiter after the property
  Delimiter = ":"

  Set ns = Session. Application. GetNamespace("MAPI")

  'Access the inbox folder
  Set InBoxFolder = ns. GetDefaultFolder(olFolderInbox)
  Set InBoxFolder = InBoxFolder. Folders("MBAA LEADS")

 For Each InBoxItem In InBoxFolder. Items

'Only process mails
 If Not TypeOf InBoxItem Is MailItem Then GoTo SkipItem
'Already processed? 
If Not InBoxItem. UnRead Then GoTo SkipItem
'Mark as read
InBoxItem. UnRead = False
'Get the body
Contents = InBoxItem. Body
'Create space for the result
ReDim Result(LBound(Prop) To UBound(Prop)) As String
'Search each property
i = 1

rs. Open ("Prospects")

rs. AddNew

For k = LBound(Prop) To UBound(Prop)
'MsgBox k

  'Find the property (after the last position)
  i = InStr(i, Contents, Prop(k), vbTextCompare)
  If i = 0 Then GoTo NextProp
  'Find the delimiter after the property
  i = InStr(i, Contents, Delimiter)
  If i = 0 Then GoTo NextProp
  'Find the end of this line
  j = InStr(i, Contents, vbCr)
  If j = 0 Then GoTo NextProp
  'Store the related part
  Result(k) = Trim$(Mid$(Contents, i + Len(Delimiter), j - i - Len(Delimiter)))

If (k = 0) Then

'First Name
rs![First Name] = StrConv(Trim(Mid(CStr(Result(k)), 1, InStr(CStr(Result(k)), " "))), vbProperCase)
'Last Name
rs![Last Name] = StrConv(Trim(Mid(CStr(Result(k)), InStrRev(CStr(Result(k)), " ") + 1)), vbProperCase)
MkDir ("M:\CRM\PROSPECTS\" & StrConv(Trim(Mid(CStr(Result(k)), 1, InStr(CStr(Result(k)), " "))), vbProperCase) & " " & StrConv(Trim(Mid(CStr(Result(k)), InStrRev(CStr(Result(k)), " ") + 1)), vbProperCase) & "")
'Copy Initial Email Inquiry
InBoxItem. SaveAs "M:\CRM\PROSPECTS\" & StrConv(Trim(Mid(CStr(Result(k)), 1, InStr(CStr(Result(k)), " "))), vbProperCase) & " " & StrConv(Trim(Mid(CStr(Result(k)), InStrRev(CStr(Result(k)), " ") + 1)), vbProperCase) & "\Initial Email-MBAA WEBSITE.msg"
ElseIf (k = 1) Then

rs![E-mail Address] = Trim(Mid(CStr(Result(k)), 1, InStr(CStr(Result(k)), " ")))
ElseIf (k = 2) Then

rs![Home Phone] = Result(k)

ElseIf (k = 3) Then
'Check customer type
    If CStr(Result(k)) Like "*Self Insured Group*" Then
        rs![Lead Type] = 1 'Self Insured Group
    ElseIf CStr(Result(k)) Like "*Insurance Company*" Then
        rs![Lead Type] = 2 'Insurance Company
    ElseIf CStr(Result(k)) Like "*Individual Patient*" Then
        rs![Lead Type] = 3 'Consumer
    ElseIf CStr(Result(k)) Like "*Attorney*" Then
        rs![Lead Type] = 4 'Attorney
    ElseIf CStr(Result(k)) Like "*Government*" Then
        rs![Lead Type] = 5 'Attorney
    ElseIf CStr(Result(k)) Like "*Physician*" Then
        rs![Lead Type] = 6 'Physician
    ElseIf CStr(Result(k)) Like "*International Company*" Then
        rs![Lead Type] = 7 'International Company
    ElseIf CStr(Result(k)) Like "*Broker*" Then
        rs![Lead Type] = 8 'Broker
    ElseIf CStr(Result(k)) Like "*Association/Organization*" Then
        rs![Lead Type] = 19 'Association/Organization
    ElseIf CStr(Result(k)) Like "*Other*" Then
        rs![Lead Type] = 9 'Other
    End If

End If

NextProp:
Next
rs![CreatedOn] = InBoxItem. SentOn
rs![Source] = 13 'MBAA WEBSITE
rs. Update
rs. Close

SkipItem:
Next
con. Close
End Sub

A:

I'll assume that your mailbox is on an Exchange server or Office365 (which is also Exchange). 
Server side rules only work for a limited set of actions.   Mostly those actions that are simple, like moving items, replying, etc. 
Anything more complicated than that becomes a client-only rule.   In the case of a rule that runs a script, those will always be client-only rules because the script is actually part of, and executed by Outlook, not the mail server.   So, even though the rule is stored in your mailbox, the execution is such that it requires Outlook to work some parts of the action. 
You'll see when you finish making a rule, on the last page of the rule wizard, it will indicate whether it is a client-only rule or not. 
The only option for a server side rule using a script, or some code as at the server level as either a Transport Rule, or a Transport Agent. 
I would suggest that you break up the action in to 2 parts, one that will be a server-side rule and will run with or without Outlook, then a rule that you can run "on-demand" to do the more complicated bits.   It's not fully automated, but at least you can get the items moved to some temporary folder and out of the way.