Desea una regla de Outlook que se ejecute en todos los mensajes entrantes excepto aquellos que contengan un campo de encabezado específico, como X-Category o X-Priority. El Asistente para reglas de Outlook no expone una condición nativa para campos de encabezado personalizados. Este artículo explica cómo usar una combinación de una regla de ejecutar un script y una macro VBA corta para excluir mensajes que contengan un valor de encabezado particular. Aprenderá los pasos exactos para escribir la macro, adjuntarla a una regla y probar la exclusión.
Puntos clave: Excluir correos por encabezado personalizado en Outlook
- Pestaña Desarrollador > Visual Basic > Insertar > Módulo: Cree una función VBA que verifique un campo de encabezado específico y devuelva True si el encabezado no está presente.
- Asistente para reglas > Ejecutar un script > Seleccione su macro: Adjunte la macro a una regla para que la regla solo procese mensajes que carezcan del encabezado objetivo.
- Archivo > Opciones > Centro de confianza > Configuración de macros > Habilitar todas las macros: Necesario antes de que la regla pueda ejecutar el código VBA.
Cómo manejan las reglas de Outlook los encabezados personalizados
Las condiciones de regla integradas de Outlook cubren remitente, destinatario, asunto, cuerpo y un conjunto de campos de encabezado predefinidos como Importancia o Confidencialidad. El Asistente para reglas no incluye una condición para campos de encabezado arbitrarios como X-Mailer, X-List o encabezados X personalizados agregados por un sistema de correo. Para solucionar esta limitación, debe usar la acción Ejecutar un script, que llama a una función VBA que inspecciona el objeto MailItem.PropertyAccessor. La macro puede leer cualquier propiedad MAPI o encabezado de transporte. Al escribir una función que devuelva True solo cuando el encabezado no está presente, la regla excluye efectivamente los mensajes que contienen el encabezado. La macro no modifica el mensaje; solo controla si la regla continúa con sus acciones restantes.
Requisitos previos para usar la acción de regla Ejecutar un script
Antes de crear la regla, confirme que los siguientes elementos estén disponibles.
- Cliente de escritorio Outlook para Windows. La acción Ejecutar un script no está disponible en Outlook en la web ni en Outlook para Mac.
- Seguridad de macros configurada para permitir macros firmadas o todas las macros. Habilitará esto en el Centro de confianza.
- El nombre exacto del encabezado que desea excluir. Los nombres de encabezado no distinguen mayúsculas de minúsculas, pero deben escribirse exactamente como aparecen en el origen del mensaje, por ejemplo X-Custom-Header.
- Un correo de prueba que contenga el encabezado para que pueda verificar que la exclusión funciona.
Pasos para crear la macro VBA que verifica un encabezado
- Abrir el editor de VBA
En Outlook, presione Alt+F11. Esto abre la ventana de Microsoft Visual Basic for Applications. - Insertar un nuevo módulo
En el panel Proyecto de la izquierda, expanda Project1 y haga clic con el botón derecho en Módulos. Seleccione Insertar > Módulo. Aparece una ventana de código en blanco. - Pegar la función de verificación de encabezado
Copie y pegue el siguiente código en la ventana del módulo. ReemplaceX-Your-Headercon el nombre real del encabezado que desea excluir.Function ExcludeIfHeaderPresent(MyItem As MailItem) As Boolean Const HEADER_NAME As String = "X-Your-Header" Dim headerValue As String On Error Resume Next headerValue = MyItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/" & HEADER_NAME & "/0x0000001F") On Error GoTo 0 ' Return True (run the rule) only if the header is missing ExcludeIfHeaderPresent = (headerValue = "" Or IsNull(headerValue)) End FunctionLa función lee la propiedad MAPI nombrada que corresponde al encabezado de transporte. Si el encabezado no está presente, la función devuelve True, lo que indica a la regla que continúe el procesamiento. Si el encabezado existe, la función devuelve False y la regla se detiene.
- Guardar la macro y cerrar el editor
Presione Ctrl+S para guardar. Asigne un nombre al proyecto si se le solicita. Cierre la ventana de VBA y vuelva a Outlook.
Pasos para habilitar macros en el Centro de confianza
- Abrir la configuración del Centro de confianza
Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza. - Cambiar la configuración de macros
Seleccione Configuración de macros. Elija Habilitar todas las macros. Esta configuración permite que la regla ejecute la función VBA sin una solicitud de seguridad cada vez. Haga clic en Aceptar dos veces para cerrar ambos cuadros de diálogo.
Pasos para crear la regla que usa la macro
- Abrir el Asistente para reglas
Vaya a Archivo > Administrar reglas y alertas. En el cuadro de diálogo Reglas y alertas, haga clic en Nueva regla. - Seleccionar una plantilla
En Iniciar desde una regla en blanco, seleccione Aplicar regla a los mensajes que reciba. Haga clic en Siguiente. - Agregar condiciones (opcional)
Seleccione las condiciones que desee aplicar a todos los mensajes, como de un remitente específico o con palabras específicas en el asunto. Estas condiciones se ejecutan antes de la verificación de la macro. Haga clic en Siguiente. Si se le solicita, haga clic en Sí para aplicar la regla a todos los mensajes. - Agregar la acción Ejecutar un script
En la lista Seleccionar acción(es), desplácese hacia abajo y marque ejecutar un script. En el cuadro Paso 2, haga clic en la palabra subrayada script. En el cuadro de diálogo Elegir un script, seleccione la función ExcludeIfHeaderPresent de la lista. Haga clic en Aceptar. - Agregar la acción principal
Aún en la lista Seleccionar acción(es), marque la acción que desea aplicar a los mensajes que pasan la verificación de encabezado. Por ejemplo, moverlo a una carpeta, asignar una categoría o reenviarlo. Haga clic en Siguiente. - Establecer excepciones (opcional)
Agregue las excepciones que desee. Haga clic en Siguiente. - Nombrar la regla y finalizar
Escriba un nombre descriptivo como “Excluir mensajes con X-Header”. Marque Activar esta regla. Haga clic en Finalizar y luego en Aceptar para cerrar el cuadro de diálogo Reglas y alertas.
Probar la regla
Envíese un correo que contenga el encabezado objetivo. Para agregar un encabezado en un mensaje de prueba, puede usar una herramienta como Telnet o un script, o pedir a su administrador de correo que envíe uno. El mensaje debe entregarse en su Bandeja de entrada sin que se aplique la acción de la regla. Un segundo mensaje que carezca del encabezado debe activar la acción de la regla. Si la regla no se ejecuta, verifique el nivel de seguridad de macros y confirme que la función VBA se compile sin errores abriendo el editor de VBA y haciendo clic en Depurar > Compilar VBAProject.
Si la regla no excluye los mensajes correctamente
Outlook muestra una solicitud de seguridad cada vez que se ejecuta la regla
La macro accede al objeto PropertyAccessor, lo que activa la protección del modelo de objetos de Outlook en algunas configuraciones de seguridad. Para suprimir las solicitudes, instale el complemento Outlook Security Manager de un proveedor de confianza, o use una herramienta de terceros que registre la macro como de confianza. Como alternativa, use un certificado digital para firmar el proyecto de VBA y habilite solo las macros firmadas en el Centro de confianza.
La macro devuelve un error o no detecta el encabezado
Verifique que el nombre del encabezado sea correcto y que sea un encabezado de transporte visible en el origen del mensaje. Abra el mensaje de prueba, presione Ctrl+F3 para abrir el cuadro de diálogo Propiedades y busque el encabezado en el cuadro Encabezados de Internet. El nombre del encabezado en el código VBA debe coincidir exactamente, excepto por mayúsculas y minúsculas. También confirme que la cadena de esquema en la llamada GetProperty use el GUID correcto para propiedades nombradas. El GUID del código anterior es el estándar para propiedades con nombre de cadena. Si su encabezado usa un espacio de nombres diferente, ajuste la cadena de esquema en consecuencia.
La regla se ejecuta en todos los mensajes independientemente del encabezado
La función devuelve True cuando el encabezado no está presente. Si la regla sigue procesando mensajes que contienen el encabezado, es posible que la función devuelva True incorrectamente. Agregue un mensaje de depuración en el editor de VBA insertando MsgBox headerValue antes de la línea de retorno, envíe un mensaje de prueba y observe el cuadro de diálogo. Si el cuadro de diálogo muestra un valor, el encabezado está presente y la función debe devolver False. Corrija la lógica si es necesario.
Regla Ejecutar un script vs condiciones integradas: diferencias clave
| Elemento | Regla Ejecutar un script | Condiciones integradas |
|---|---|---|
| Compatibilidad con encabezados | Cualquier encabezado de transporte mediante PropertyAccessor | Solo Importancia, Confidencialidad y algunos encabezados predefinidos |
| Esfuerzo de configuración | Requiere código VBA y habilitación de macros | Selección con clics desde el Asistente para reglas |
| Solicitudes de seguridad | Posibles con acceso a PropertyAccessor | Sin solicitudes |
| Portabilidad | La macro debe estar presente en cada equipo | Las reglas se sincronizan entre cuentas de Exchange |
Ahora puede crear una regla de Outlook que excluya correos con un encabezado específico usando una macro VBA adjunta a la acción Ejecutar un script. Pruebe la regla con un mensaje que contenga el encabezado para confirmar que la exclusión funciona. Para una solución más permanente sin macros, considere usar una regla de transporte en el servidor de Exchange si tiene acceso de administrador. La regla de transporte puede filtrar por cualquier encabezado antes de que el mensaje llegue a la Bandeja de entrada, eliminando la necesidad de código VBA del lado del cliente.