2010-10-05 23 views
39

क्या रेगेक्स स्ट्रिंग के आधार पर Outlook 2007 में नियम बनाना संभव है?नियमित अभिव्यक्ति नियम?

मैं जैसे स्ट्रिंग वाली संदेशों के लिए एक फिल्टर जोड़ने के लिए कोशिश कर रहा हूँ: 4000-10, एक चार अंकों की संख्या एक पानी का छींटा और फिर एक दो अंकों की संख्या के द्वारा पीछा किया, जो 0000-00 से 9999-99 के लिए कुछ भी हो सकता है।

मैं इसे रेगेक्स के रूप में उपयोग कर रहा था: \b[0-9]{4}\-[0-9]{2}\b लेकिन फ़िल्टर काम नहीं कर रहा है। मैंने कुछ अन्य संशोधनों के साथ-साथ कोई किस्मत भी नहीं की है। मैं इस बारे में कुछ ठोस ऑनलाइन नहीं ढूंढ पाया कि आउटलुक भी नियम में रेगेक्स में प्रवेश करने का समर्थन करता है, हालांकि, मुझे लगा कि मैं अपना समय बर्बाद कर रहा हूं, तो मैं यहां पूछूंगा।

संपादित करें: क्रिस की टिप्पणी के लिए धन्यवाद, मैं इस फ़िल्टर को मैक्रो के माध्यम से कार्यान्वित करने में सक्षम था। मैंने सोचा था कि मैं अपने कोड साझा करेंगे नीचे के मामले में यह किसी और को मदद करने में सक्षम है:

Sub JobNumberFilter(Message As Outlook.MailItem) 
    Dim MatchesSubject, MatchesBody 
    Dim RegEx As New RegExp 

    'e.g. 1000-10' 
    RegEx.Pattern = "([0-9]{4}-[0-9]{2})" 

    'Check for pattern in subject and body' 
    If (RegEx.Test(Message.Subject) Or RegEx.Test(Message.Body)) Then 
     Set MatchesSubject = RegEx.Execute(Message.Subject) 
     Set MatchesBody = RegEx.Execute(Message.Body) 
     If Not (MatchesSubject Is Nothing And MatchesBody Is Nothing) Then 
      'Assign "Job Number" category' 
      Message.Categories = "Job Number" 
      Message.Save 
     End If 
    End If 
End Sub 
+1

क्या यह वास्तव में प्रोग्रामिंग से संबंधित है? मेरा मतलब है, आप नहीं पूछते कि रेगेक्स सही है या नहीं, केवल अगर दृष्टिकोण regexes –

+0

का समर्थन करता है, तो वास्तव में इसका मतलब यह दोनों प्रश्नों के रूप में होता है। मैंने regexes का उपयोग नहीं किया है, इसलिए मैं भी इसके लिए अनिश्चित था। हालांकि, एक ही पहलू में, यदि Outlook regexes का समर्थन भी नहीं करता है, तो बिंदु मूक है, इसलिए वह थोडा था जहां मैं इसके साथ जा रहा था। – kcoppock

+1

मुझे यह नहीं लगता कि यह महत्वपूर्ण है, ऐसा लगता है कि यह भी मिलान करता है = "[0-9] {4} - [0-9] {2}" –

उत्तर

43

मुझे नहीं पता कि एक रेगेक्स सीधे नियम में उपयोग किया जा सकता है, लेकिन आप एक नियम को एक स्क्रिप्ट ट्रिगर कर सकते हैं और स्क्रिप्ट regexes का उपयोग कर सकते हैं। मुझे Outlook से नफरत है।

सबसे पहले, आपको टूल्स - मैक्रो - ओपन विजुअल बेसिक एडिटर (Alt-F11 शॉर्टकट) के माध्यम से स्क्रिप्ट संपादक खोलना होगा।

संपादक खुल जाएगा। इसमें ऊपरी-बाएं कोने में एक छोटे पैनल में एक परियोजना रूपरेखा होनी चाहिए। परियोजना को VBAProject.OTM के रूप में सूचीबद्ध किया जाएगा। Microsoft Office Outlook ऑब्जेक्ट्स को प्रकट करने के लिए इस आइटम का विस्तार करें। इस ऑट्यूशन सत्र को प्रकट करने के लिए इसका विस्तार करें। कोड संपादन फलक खोलने के लिए ThisOutlookSession को डबल-क्लिक करें (जो शायद खाली हो जाएगा)।

अगला चयन उपकरण मेनू | संदर्भ और RegExp संदर्भों को सक्षम करें जैसे कि "माइक्रोसॉफ्ट वीबीस्क्रिप्ट नियमित अभिव्यक्ति 5.5"

अब आप अपनी फ़िल्टरिंग कार्रवाई करने के लिए एक सबराउटिन बना सकते हैं। ध्यान दें कि किसी नियम द्वारा बुलाए गए सबराउटिन में Outlook के प्रकार का एक पैरामीटर होना चाहिए। MailItem। उदाहरण के लिए:

' note that Stack Overflow's syntax highlighting doesn't understand VBScript's 
' comment character (the single quote) - it treats it as a string delimiter. To 
' make the code appear correctly, each comment must be closed with another single 
' quote so that the syntax highlighter will stop coloring everything as a string.' 

Public Enum Actions 
    ACT_DELIVER = 0 
    ACT_DELETE = 1 
    ACT_QUARANTINE = 2 
End Enum 

Sub MyNiftyFilter(Item As Outlook.MailItem) 
    Dim Matches, Match 
    Dim RegEx As New RegExp 
    RegEx.IgnoreCase = True 

    ' assume mail is good' 
    Dim Message As String: Message = "" 
    Dim Action As Actions: Action = ACT_DELIVER 

    ' SPAM TEST: Illegal word in subject' 
    RegEx.Pattern = "(v\|agra|erection|penis|boner|pharmacy|painkiller|vicodin|valium|adderol|sex med|pills|pilules|viagra|cialis|levitra|rolex|diploma)" 
    If Action = ACT_DELIVER Then 
     If RegEx.Test(Item.Subject) Then 
      Action = ACT_QUARANTINE 
      Set Matches = RegEx.Execute(Item.Subject) 
      Message = "SPAM: Subject contains restricted word(s): " & JoinMatches(Matches, ",") 
     End If 
    End If 

    ' other tests' 

    Select Case Action 
     Case Actions.ACT_QUARANTINE 
      Dim ns As Outlook.NameSpace 
      Set ns = Application.GetNamespace("MAPI") 

      Dim junk As Outlook.Folder 
      Set junk = ns.GetDefaultFolder(olFolderJunk) 

      Item.Subject = "SPAM: " & Item.Subject 
      If Item.BodyFormat = olFormatHTML Then 
       Item.HTMLBody = "<h2>" & Message & "</h2>" & Item.HTMLBody 
      Else 
       Item.Body = Message & vbCrLf & vbCrLf & Item.Body 
      End If 

      Item.Save 
      Item.Move junk 

     Case Actions.ACT_DELETE 
      ' similar to above, but grab Deleted Items folder as destination of move' 

     Case Actions.ACT_DELIVER 
      ' do nothing' 
    End Select 
End Sub 


Private Function JoinMatches(Matches, Delimeter) 
    Dim RVal: RVal = "" 

    For Each Match In Matches 
     If Len(RVal) <> 0 Then 
      RVal = RVal & ", " & Match.Value 
     Else 
      RVal = RVal & Match.Value 
     End If 
    Next 

    JoinMatches = RVal 
End Function 

अगला, आपको इस स्क्रिप्ट को ट्रिगर करने के लिए नियम (टूल्स - नियम और अलर्ट) बनाना होगा। विज़ार्ड लॉन्च करने के लिए संवाद पर नए नियम बटन पर क्लिक करें। नियम के लिए एक टेम्पलेट का चयन करें। "रिक्त नियम से प्रारंभ करें" श्रेणी से "टेम्पलेट आने पर संदेशों को चेक करें" चुनें। अगला पर क्लिक करें।

"केवल इस मशीन पर" स्थिति चुनें (सहज नहीं है?) और अगला क्लिक करें।

"एक स्क्रिप्ट चलाएं" विकल्प चुनें। जादूगर जहां यह अपने नए नियम से पता चलता के तल में, इसे पढ़ने करना चाहिए:

Apply this rule after the message arrives 
on this machine only 
run a script 

वाक्यांश "एक स्क्रिप्ट" क्लिक करने योग्य लिंक है। इसे क्लिक करें और आउटलुक एक संवाद प्रदर्शित करेगा जो आपके द्वारा पहले बनाए गए सबराउटिन को सूचीबद्ध करेगा। अपने सबराउटिन का चयन करें और ओके बटन पर क्लिक करें।

आप नियम में अपवाद जोड़ने के लिए अगला क्लिक कर सकते हैं या यदि आपके पास कोई अपवाद नहीं है तो समाप्त क्लिक करें।

अब, हालांकि यह प्रक्रिया पर्याप्त रूप से गठित नहीं हुई थी, तब भी जब भी आप कोड को हस्ताक्षर करने के साथ स्क्रिप्ट पर हस्ताक्षर नहीं करते हैं, तब तक यह नियम Outlook को रोक और पुनरारंभ नहीं करेगा।

यदि आपके पास पहले से कोड कोडिंग कुंजी नहीं है, तो आप OpenSSL के साथ create one कर सकते हैं।

क्या मैंने उल्लेख किया कि मुझे Outlook से नफरत है?

+0

वाह। हाँ, मैं तुम्हारा दर्द समझ सकता हूँ। मैंने पावरपॉइंट (भयानक दुःस्वप्न) में कुछ हल्का प्रोग्रामिंग किया है और यह भयानक है। बहुत विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद! जब मैं कुछ खाली समय प्राप्त करता हूं और देखता हूं कि मैं क्या कर सकता हूं तो मैं इस पर कुछ काम करूंगा। फिर से धन्यवाद! – kcoppock

+0

बस इसमें जोड़ने के लिए, मैंने पाया है कि एक मैक्रो पर हस्ताक्षर करने का एक वैकल्पिक, आसान तरीका है: एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करना। http://msdn.microsoft.com/en-us/library/aa155754(office.10).aspx#oldigitalsignature_sign आप वीबीए प्रोजेक्ट्स के लिए डिजिटल सर्टिफिकेट नामक कार्यालय के वैकल्पिक रूप से स्थापित हिस्से के माध्यम से एक बना सकते हैं। 'एनम' के लिए – kcoppock

+0

+1 (मेरी इच्छा है कि मैं +1000 कर सकता हूं!)। मुझे लगता है कि मुझे वापस जाने और हर मैक्रो बनाने की जरूरत है जिसे मैंने कभी भी दस लाख बार अधिक पठनीय लिखा है! धन्यवाद! –

15

Microsoft Outlook does not support regular expressions। आप वाइल्डकार्ड खोजों को निष्पादित कर सकते हैं, हालांकि कुछ अतुलनीय कारणों के लिए वाइल्डकार्ड वर्ण % है, * नहीं।

+1

धन्यवाद ईथर। यह विचित्र है कि वे वाइल्डकार्ड चरित्र बदल देंगे। – kcoppock

+2

यह KB आलेख नियम विज़ार्ड प्रति से नहीं है, बल्कि सीआरएम के लिए ऐड-ऑन है। यदि आप लेख को पार्स करते हैं तो आप देखेंगे कि यह इस संदर्भ में% साइन का उपयोग क्यों किया जाता है, इस बारे में पूरी तरह से समझ में आता है। ऐसा इसलिए है क्योंकि यह एक SQL क्वेरी है जहां वाइल्डकार्ड वर्ण वास्तव में% – noonand

+0

एमएस 2013 इनबॉक्स पर देखे जाने वाले मुख्य खोज रिबन से ईमेल विषयों और निकायों (कम से कम) को खोजते समय प्रतिशत चरित्र का समर्थन करता है। लेकिन यदि आप "खोज फ़ोल्डर" (वर्चुअल फ़ोल्डर जिसका सामग्री विभिन्न खोज स्थितियों के परिणाम हैं) बनाते हैं, तो "खोज फ़ोल्डर्स" में खोज स्थितियां प्रतिशत वाइल्डकार्ड का समर्थन नहीं करती हैं। माइक्रोसॉफ्ट जाने का तरीका>; –