¿Cómo filtrar el correo electrónico de Outlook usando una regla con un script VBA?

14

Ciertas cosas no son posibles utilizando las reglas de correo electrónico predeterminadas, como buscar asuntos o cuerpos de mensajes con comodines. Puede hacer varias palabras, pero no es lo mismo si necesita las palabras con un carácter separado el uno del otro. ¿Cómo puedo escribir mi propio código de Visual Basic para Aplicaciones para filtrar el correo electrónico de Outlook?

Grant Bowman
fuente

Respuestas:

12

Miré hacia arriba y hacia abajo para todas estas partes necesarias para que este filtro simple suceda. Los filtros procmail de Unix son muy fáciles de usar en comparación. Todos los asistentes de Microsoft Outlook se interponen en el camino de un filtro simple usando comodines. Si bien muchas condiciones de filtro de correo electrónico que Microsoft proporciona de manera predeterminada son útiles, nada puede superar la flexibilidad y la personalización del código en ejecución.

  1. Escribe tu código.

Alt-F11 muestra el editor de código VBA. Haga doble clic en ThisOutlookSession. Escribe tu código. En mi caso, está usando una expresión regular en la línea de asunto y moviéndola no al DefaultFolder sino a mi propio pst en una subcarpeta.

Sub filter(Item As Outlook.MailItem)
    Dim ns As Outlook.NameSpace
    Dim MailDest As Outlook.Folder
    Set ns = Application.GetNamespace("MAPI")
    Set Reg1 = CreateObject("VBScript.RegExp")
    Reg1.Global = True
    Reg1.Pattern = "(.*Abc.20.*)"
    If Reg1.Test(Item.Subject) Then
        Set MailDest = ns.Folders("Personal Folders").Folders("one").Folders("a")
        Item.Move MailDest
    End If
End Sub
  1. Ejecute el código para cada correo electrónico entrante con una regla.

En reglas, seleccione "Administrar reglas y alertas ...". La nueva regla se verá así

Apply this rule after the message arrives run Project1.ThisOutlookSession.filter

Para obtener esto, para el Paso 1: Seleccione las condiciones: simplemente haga clic en Siguiente. Confirme que se aplica a todos los mensajes haciendo clic en Aceptar. Para Seleccionar acción (es), marque "ejecutar un script" y luego haga clic para elegir el script de filtro y seleccione Siguiente o Finalizar. Para Seleccionar excepciones, haga clic en Siguiente o Finalizar. Déle un buen nombre como vba-filter y marque Activar esta regla. haga clic en Finalizar Como se adapta a una carpeta local, haga clic en Aceptar cuando solicite confirmar que esta regla no funcionará para el correo electrónico que revise en línea o desde otro dispositivo. Haga clic en Aceptar en el cuadro de diálogo Reglas y alertas.

  1. A Outlook no le gusta cuando las macros no están firmadas. Para auto-firmar sus macros, cree un certificado y úselo .
Grant Bowman
fuente
Leí sobre muchas otras soluciones parciales, como las macros y la creación de columnas definidas por el usuario. Esto permite la clasificación de la interfaz de usuario o el filtrado de vistas, pero eso editará todos los mensajes a medida que lleguen, lo que no es lo que quería hacer.
Grant Bowman
1
Mi cliente de Outlook deshabilitaría inconsistentemente la regla para ejecutar vbscript vba-filter al iniciar Outlook. Esto causó problemas. También hay un límite de caracteres en el vbscript para agregar a cada regla. Para que funcionen de manera consistente, aunque con menos flexibilidad, reescribí los filtros utilizando los filtros estándar de Outlook para que funcionen todo el tiempo.
Grant Bowman
2
Faltaba esta opción para ejecutar un script. Encontré un enlace relacionado aquí: slipstick.com/outlook/rules/outlook-2016-run-a-script-rules
Jayan
El código anterior no funciona para mí. Puse Abc.20 en el archivo de asunto, pero los mensajes nunca salen de la Bandeja de entrada.
Tensigh
1
Usando la ventana de depuración logré que la expresión regular funcionara. Ahora es solo cuestión de moverse a las carpetas correctas. Creo que puedo resolverlo. Gracias por tu ayuda.
Tensigh