Necesita encontrar un correo electrónico específico según un valor del encabezado de Internet, como un ID de seguimiento personalizado o una puntuación de spam. La búsqueda integrada de Outlook no permite buscar directamente dentro de los campos del encabezado de Internet. Este artículo explica cómo crear una propiedad personalizada en Outlook que extrae un valor del encabezado de Internet y luego usar esa propiedad para buscar y filtrar sus elementos.
El método utiliza VBA de Outlook para leer el texto del encabezado, analizar el valor de destino y almacenarlo en un campo definido por el usuario. Una vez que la propiedad personalizada está rellenada, puede buscarla con Búsqueda instantánea o crear una carpeta de búsqueda. Este enfoque funciona para cualquier campo de encabezado, incluidos X-Spam-Status, Received, Authentication-Results o encabezados X personalizados.
Aprenderá a escribir la macro de VBA, asignarla a un botón y aplicar la propiedad personalizada a sus criterios de búsqueda. No se requieren complementos de terceros.
Puntos clave: buscar por valor de encabezado de Internet en Outlook
- Macro de VBA con PropertyAccessor.GetProperty: Lee la propiedad PR_TRANSPORT_MESSAGE_HEADERS para acceder al encabezado de Internet completo.
- Campo definido por el usuario en la carpeta: Almacena el valor de encabezado extraído como un campo de texto personalizado que se puede buscar con Búsqueda instantánea.
- Carpeta de búsqueda con criterios de propiedad personalizada: Recopila automáticamente todos los elementos que coinciden con un valor de encabezado específico sin escaneo manual.
Cómo funcionan los encabezados de Internet y las propiedades personalizadas en Outlook
Cada correo electrónico contiene encabezados de Internet que registran información de enrutamiento, resultados de autenticación y metadatos personalizados agregados por los servidores de correo. Outlook almacena el encabezado completo en la propiedad MAPI PR_TRANSPORT_MESSAGE_HEADERS (nombre DASL: http://schemas.microsoft.com/mapi/proptag/0x007D001E). Esta propiedad no se expone en la interfaz predeterminada de Outlook.
Una propiedad personalizada, también llamada campo definido por el usuario, es un campo de texto que se agrega a una carpeta. Puede escribir datos en él mediante VBA y luego buscar ese campo con consultas de Búsqueda instantánea como custom_field_name:value. El campo reside en el esquema de la carpeta y persiste hasta que lo elimine. Cada elemento de la carpeta puede tener un valor diferente para el mismo campo personalizado.
Para buscar por valor de encabezado, necesita una macro que haga tres cosas:
- Leer el encabezado completo de un correo electrónico seleccionado.
- Analizar la línea de encabezado de destino y extraer el valor.
- Escribir ese valor en una propiedad personalizada del mismo elemento.
Una vez que la propiedad personalizada está rellenada, puede buscar en toda la carpeta usando esa propiedad como criterio. Este método solo funciona en elementos que ya haya procesado con la macro. Para los correos electrónicos entrantes nuevos, puede ejecutar la macro automáticamente mediante el evento ItemAdd.
Pasos para crear una propiedad personalizada y buscar por valor de encabezado de Internet
Siga estos pasos para configurar la macro de VBA, crear el campo personalizado y ejecutar la extracción en sus correos electrónicos.
- Habilitar la pestaña Desarrollador
Abra Outlook. Vaya a Archivo > Opciones > Personalizar cinta de opciones. En la columna derecha, marque la casilla Desarrollador y haga clic en Aceptar. La pestaña Desarrollador aparece en la cinta de opciones. - Abrir el Editor de VBA
Haga clic en la pestaña Desarrollador y luego en Visual Basic. Como alternativa, presione Alt+F11 en el teclado. - Insertar un nuevo módulo
En el editor de VBA, vaya a Insertar > Módulo. Se abre una ventana de código en blanco. - Pegar el código de la macro
Copie y pegue el siguiente código en la ventana del módulo. ReemplaceX-Custom-Headercon el nombre exacto del encabezado que desea buscar.Sub ExtractHeaderToCustomField() Dim olApp As Outlook.Application Dim olExp As Outlook.Explorer Dim olSel As Outlook.Selection Dim olMail As Outlook.MailItem Dim strHeader As String Dim strHeaderName As String Dim strValue As String Dim intPos As Integer Dim intEndPos As Integer Set olApp = Outlook.Application Set olExp = olApp.ActiveExplorer Set olSel = olExp.Selection ' Change this to the header you want to extract strHeaderName = "X-Custom-Header" If olSel.Count = 0 Then MsgBox "Select at least one email." Exit Sub End If For Each olMail In olSel ' Read the full internet header strHeader = olMail.PropertyAccessor.GetProperty( "http://schemas.microsoft.com/mapi/proptag/0x007D001E") ' Find the target header line intPos = InStr(1, strHeader, strHeaderName & ":", vbTextCompare) If intPos > 0 Then ' Get the start of the value (after ": ") intPos = intPos + Len(strHeaderName) + 2 intEndPos = InStr(intPos, strHeader, vbCrLf) If intEndPos = 0 Then intEndPos = Len(strHeader) + 1 strValue = Mid(strHeader, intPos, intEndPos - intPos) strValue = Trim(strValue) ' Write the value into a user-defined field olMail.UserProperties("HeaderValue") = strValue olMail.Save End If Next Set olMail = Nothing Set olSel = Nothing Set olExp = Nothing Set olApp = Nothing MsgBox "Done." End Sub - Agregar el campo personalizado a la carpeta
En Outlook, haga clic con el botón derecho en la carpeta que desea buscar (por ejemplo, Bandeja de entrada). Elija Propiedades. Vaya a la pestaña General y haga clic en el botón Nuevo en Campos disponibles en esta carpeta. Cree un nuevo campo de texto llamadoHeaderValuey haga clic en Aceptar dos veces. - Ejecutar la macro en los correos electrónicos seleccionados
En Outlook, seleccione uno o varios correos electrónicos. Presione Alt+F8 para abrir el cuadro de diálogo Macros. ElijaExtractHeaderToCustomFieldy haga clic en Ejecutar. La macro lee el encabezado de cada correo electrónico, extrae el valor del encabezado especificado y lo escribe en el campo HeaderValue. - Buscar usando la propiedad personalizada
Haga clic dentro del cuadro de Búsqueda instantánea en la parte superior de la carpeta. EscribaHeaderValue:yourvaluereemplazandoyourvaluecon el valor real que desea encontrar. Outlook filtra la lista para mostrar solo los elementos en los que coincide el campo personalizado.
Automatizar la macro para correos electrónicos nuevos
Para ejecutar la extracción automáticamente cuando llega correo nuevo, use el evento Items.ItemAdd en VBA. Abra el editor de VBA, haga doble clic en ThisOutlookSession en el Explorador de proyectos y pegue el código a continuación. Reemplace Inbox con el nombre de su carpeta de destino si es necesario.
Private WithEvents olInboxItems As Outlook.Items
Private Sub Application_Startup()
Dim olNS As Outlook.NameSpace
Set olNS = Application.GetNamespace("MAPI")
Set olInboxItems = olNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub olInboxItems_ItemAdd(ByVal Item As Object)
If TypeOf Item Is Outlook.MailItem Then
Dim olMail As Outlook.MailItem
Set olMail = Item
' Call the extraction subroutine
Call ExtractHeaderToCustomFieldSingle(olMail)
End If
End Sub
Sub ExtractHeaderToCustomFieldSingle(olMail As Outlook.MailItem)
Dim strHeader As String
Dim strHeaderName As String
Dim strValue As String
Dim intPos As Integer
Dim intEndPos As Integer
strHeaderName = "X-Custom-Header"
On Error Resume Next
strHeader = olMail.PropertyAccessor.GetProperty(
"http://schemas.microsoft.com/mapi/proptag/0x007D001E")
If Err.Number <> 0 Then Exit Sub
intPos = InStr(1, strHeader, strHeaderName & ":", vbTextCompare)
If intPos > 0 Then
intPos = intPos + Len(strHeaderName) + 2
intEndPos = InStr(intPos, strHeader, vbCrLf)
If intEndPos = 0 Then intEndPos = Len(strHeader) + 1
strValue = Mid(strHeader, intPos, intEndPos - intPos)
strValue = Trim(strValue)
olMail.UserProperties("HeaderValue") = strValue
olMail.Save
End If
End Sub
Problemas comunes y limitaciones al buscar por valor de encabezado
La macro devuelve un error en algunos correos electrónicos
Algunos correos electrónicos, como las solicitudes de reunión, no tienen la propiedad PR_TRANSPORT_MESSAGE_HEADERS. Agregue una instrucción On Error Resume Next antes de la llamada a GetProperty para omitir esos elementos de forma controlada. La macro anterior ya incluye esto para la versión automatizada.
El campo personalizado no aparece en los resultados de búsqueda
La Búsqueda instantánea solo indexa los campos que existen en el esquema de la carpeta. Verifique que el nombre del campo sea exactamente HeaderValue y que lo haya agregado a la carpeta correcta. Si la carpeta está en un ámbito de búsqueda que excluye los campos personalizados, use Herramientas de búsqueda > Opciones de búsqueda > Opciones de indexación para reconstruir el índice.
El valor del encabezado contiene espacios o saltos de línea adicionales
Los encabezados pueden dividirse en varias líneas. La macro anterior extrae solo la primera línea del valor del encabezado. Para valores de varias líneas, modifique el bucle para concatenar las líneas que comienzan con un espacio o una tabulación. Un analizador robusto leería todo el bloque de encabezado entre el nombre del encabezado y el siguiente encabezado.
La búsqueda no encuentra el valor después de ejecutar la macro
La propiedad personalizada solo se rellena en los elementos procesados por la macro. Los elementos que no se seleccionaron o que no estaban en la carpeta de destino no tendrán el campo. Ejecute la macro en todos los elementos existentes de la carpeta o use el evento ItemAdd automatizado para el correo futuro.
Búsqueda instantánea vs. Carpeta de búsqueda: comparación de métodos
| Elemento | Consulta de Búsqueda instantánea | Carpeta de búsqueda con propiedad personalizada |
|---|---|---|
| Esfuerzo de configuración | Ninguno después de ejecutar la macro | Crear una carpeta de búsqueda una vez |
| Actualizaciones en tiempo real | No, debe volver a ejecutar la macro para elementos nuevos | Sí, si la macro se ejecuta en ItemAdd |
| Sintaxis de consulta | HeaderValue:value |
Búsqueda avanzada con criterios de campo personalizado |
| Vista persistente | Temporal hasta que borre la búsqueda | La carpeta permanece hasta que se elimina |
| Funciona con la indexación | Sí, si el campo está indexado | Sí, el mismo índice |
Ahora puede extraer cualquier valor de encabezado de Internet en un campo personalizado de Outlook y buscar sus elementos usando ese valor. La macro de VBA le da control total sobre qué encabezado usar y a qué carpeta dirigirse. Para búsquedas recurrentes, configure una carpeta de búsqueda con el campo HeaderValue como criterio y habilite la automatización de ItemAdd para mantenerla actualizada.
Para ampliar este método, modifique la macro para extraer varios valores de encabezado en campos personalizados separados. También puede exportar los valores a una hoja de Excel usando VBA de Outlook y la propiedad Range.Value para un análisis posterior. El objeto PropertyAccessor puede leer muchas propiedades MAPI ocultas más allá de los encabezados, como el ID del mensaje o la dirección de respuesta.