2017-01-20 1 views
0

Chaque fois que j'ajoute mon script à une règle que j'ai configurée dans Outlook, il définit ma règle uniquement sur le côté client. La règle est utilisée pour obtenir un mot spécifique dans la ligne d'objet et un mot spécifique dans le corps, puis déplacez l'e-mail dans un sous-dossier de la boîte de réception, puis exécutez un script. La règle actuelle s'exécute lorsque je reçois l'e-mail en déplaçant l'e-mail dans le dossier dirigé, mais le script ne s'exécute pas à moins que je clique manuellement sur la règle pour exécuter maintenant. Comment pourrais-je arriver à l'endroit où il serait traité sur le côté serveur uniquement afin que je n'aie pas à exécuter manuellement la règle pour exécuter le script. Voici ci-dessous mon script:Outlook Rule n'exécutera pas de script à moins d'être exécuté manuellement

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 

Répondre

1

Je suppose que votre boîte aux lettres est sur un serveur Exchange ou Office365 (qui est également Exchange).

Les règles côté serveur ne fonctionnent que pour un ensemble limité d'actions. Surtout les actions simples, comme déplacer des objets, répondre, etc. Rien de plus compliqué que cela devient une règle réservée au client. Dans le cas d'une règle qui exécute un script, celles-ci seront toujours des règles uniquement client car le script fait partie intégrante d'Outlook et n'est pas exécuté par le serveur de messagerie. Ainsi, même si la règle est stockée dans votre boîte aux lettres, l'exécution est telle que Outlook a besoin de certaines parties de l'action. Vous verrez à la fin de la création d'une règle, sur la dernière page de l'assistant de règle, s'il indiquera s'il s'agit ou non d'une règle réservée au client.

La seule option pour une règle côté serveur utilisant un script ou du code au niveau du serveur comme une règle de transport ou un agent de transport.

Je suggère que vous divisez l'action en 2 parties, une qui sera une règle côté serveur et fonctionnera avec ou sans Outlook, puis une règle que vous pouvez exécuter "à la demande" pour faire le des morceaux plus compliqués. Ce n'est pas entièrement automatisé, mais au moins vous pouvez déplacer les éléments vers un dossier temporaire et hors de portée.