vbs test macro regex vba vbscript outlook-vba outlook-2007

test - using regex excel



Reglas de expresión regulares en Outlook 2007? (2)

No sé si una expresión regular se puede usar directamente en una regla, pero puede hacer que una regla active una secuencia de comandos y la secuencia de comandos puede usar expresiones regulares. Odio las perspectivas

Primero, debe abrir el editor de scripts a través de Herramientas - Macro - Abrir el Editor de Visual Basic (Alt-F11 es el atajo).

El editor se abrirá. Debe contener un esquema de proyecto en un pequeño panel en la esquina superior izquierda. El proyecto aparecerá como VBAProject.OTM. Expanda este elemento para revelar los Objetos de Microsoft Office Outlook. Expanda eso para revelar ThisOutlookSession. Haga doble clic en ThisOutlookSession para abrir el panel de edición de código (que probablemente estará en blanco).

A continuación, selecciona el menú Herramientas | Referencias y habilitar las referencias de RegExp llamadas algo así como "Microsoft VBScript Regular Expressions 5.5"

Ahora puede crear una subrutina para realizar su acción de filtrado. Tenga en cuenta que una subrutina llamada por una regla debe tener un único parámetro de tipo Outlook.MailItem. Por ejemplo:

'' 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

A continuación, debe crear una regla (Herramientas - Reglas y Alertas) para activar esta secuencia de comandos. Haga clic en el botón Nueva regla en el cuadro de diálogo para iniciar el asistente. Seleccione una plantilla para la regla. Elija la plantilla "Comprobar mensajes cuando lleguen" de la categoría "Comenzar a partir de una regla en blanco". Haga clic en Siguiente.

Elija la condición "Solo en esta máquina" (¿no es así?) Y haga clic en siguiente.

Elija la opción "ejecutar un script". En la parte inferior del asistente, donde muestra su nueva regla, debe leer:

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

La frase "una secuencia de comandos" es un enlace en el que se puede hacer clic. Haga clic en él y Outlook mostrará un cuadro de diálogo que debe mostrar la subrutina que creó anteriormente. Seleccione su subrutina y haga clic en el botón Aceptar.

Puede hacer clic en Siguiente para agregar excepciones a la regla o hacer clic en Finalizar si no tiene excepciones.

Ahora, como si el proceso no fuera lo suficientemente contorneado, esta regla se desactivará cada vez que detenga y reinicie Outlook a menos que firme el script con una clave de firma de código.

Si aún no tiene una clave de firma de código, puede crear una con OpenSSL .

¿Mencioné que odio Outlook?

¿Es posible crear reglas en Outlook 2007 basadas en una cadena de expresiones regulares?

Estoy intentando agregar un filtro para los mensajes que contienen una cadena como: 4000-10 , un número de cuatro dígitos seguido de un guión y luego un número de dos dígitos, que puede ser cualquier cosa desde 0000-00 hasta 9999-99 .

Estaba usando esto como una expresión regular: /b[0-9]{4}/-[0-9]{2}/b pero el filtro no funciona. También intenté algunas otras modificaciones sin suerte. No pude encontrar nada concreto en línea acerca de si Outlook incluso admite ingresar expresiones regulares en una regla, así que pensé que lo haría aquí en caso de que estuviera perdiendo el tiempo.

EDITAR: Gracias al comentario de Chris a continuación, pude implementar este filtro a través de una macro. Pensé que podría compartir mi código a continuación en caso de que sea capaz de ayudar a alguien más:

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