2017-01-20 291 views
0

每當我將腳本添加到規則中時,我已在Outlook中進行了設置,它將我的規則僅設置爲客戶端。該規則用於獲取主題行中的特定單詞以及主體中的特定單詞,然後將電子郵件移至收件箱的子文件夾,然後運行腳本。當我收到電子郵件時,通過將電子郵件移動到定向文件夾運行當前規則,但腳本無法運行,除非我手動單擊現在運行的規則。我怎麼才能使它在服務器端處理的地方,所以我不需要手動運行規則來運行腳本。這裏是我下面的腳本:Outlook規則將不會運行腳本,除非手動運行

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 

回答

1

我會假設你的郵箱是Exchange服務器或Office365(這也是交易所)上。

服務器端規則僅適用於有限的一組操作。主要是那些簡單的行爲,如移動項目,回覆等。 任何比這更復雜的行爲將成爲客戶端規則。在運行腳本的規則的情況下,這些規則始終是僅限客戶端的規則,因爲腳本實際上是Outlook的一部分,並且不是郵件服務器。因此,即使規則存儲在您的郵箱中,執行過程也需要Outlook執行某些操作的某些部分。 在規則嚮導的最後一頁完成制定規則時,您會看到它將指示它是否僅限客戶端規則。

使用腳本的服務器端規則或服務器級別的某些代碼作爲傳輸規則或傳輸代理的唯一選項。

我建議您將操作分解爲2個部分,一個是服務器端規則,並且可以使用或不使用Outlook來運行,然後您可以運行「按需」來執行該操作的規則更復雜的位。它不是完全自動化的,但至少可以將項目移動到某個臨時文件夾並且不受影響。

相關問題