Cuando los correos electrónicos no se entregan en su infraestructura, es necesario un análisis rápido y estructurado: Reparar el flujo de correo de Exchange 2019 significa interpretar las Transport-Queues como portadoras de síntomas, aislar las causas subyacentes (DNS, TLS, red, conector, Backpressure) y solo entonces aplicar de forma dirigida medidas como Retry, Suspend o Remove‑Message. Esta guía está dirigida a administradores, ingenieros de sistemas y operadores y aporta pasos de comprobación concretos, comandos, riesgos y estrategias de recuperación.
Importante: elimine mensajes de las colas únicamente tras una comprobación cuidadosa. Remove-Message borra contenidos de forma irreversible si no existe copia de journaling o respaldo. Registre cada paso y comuníquese con los responsables de compliance y con las áreas funcionales en caso de correo crítico para el negocio.
Reparar el flujo de correo de Exchange 2019: análisis de causas y prioridades
Empiece por la pregunta: ¿se acumula en un solo punto o los sistemas emisores generan carga de forma continua? Priorice por impacto: los dominios de correo saliente externos con relación con clientes tienen mayor prioridad que notificaciones internas. La cola suele ser un indicador, no la causa primaria: trátela como una herramienta de diagnóstico y control.
Fundamentos: qué indican las Transport-Queues
Las Transport-Queues son colas en el servicio de transporte de Exchange que retienen mensajes hasta que se entregan a un NextHop (p. ej. Smarthost, Edge, Exchange Online). Estados como Ready, Retry o Suspended muestran si Exchange sigue intentando entregar o si el procesamiento está en pausa. LastError contiene a menudo la pista diagnóstica más relevante (p. ej. DNS-Timeout, error en el TLS-Handshake).
Preparación: roles, auditoría y cumplimiento
Antes de realizar cambios activos, aclare:
- ¿Quién autoriza cambios en las colas? (Exchange‑Admin/Incident‑Owner)
- ¿Existe journaling, eDiscovery o obligaciones legales de retención que prohiban la eliminación?
- ¿Hay copias de seguridad o posibilidades de exportación para recuperar mensajes eliminados?
Documente las salidas con captura de pantalla y exportación CSV antes de ejecutar Retry o Remove‑Message.
Vista rápida: identificar las Top-Queues
En el servidor de transporte afectado, examine la vista general de colas. Los siguientes comandos de PowerShell son el punto de partida:
# Queue-Übersicht: Top 20 nach MessageCount
Get-Queue | Sort-Object MessageCount -Descending | Select-Object -First 20
Identity,DeliveryType,Status,MessageCount,NextHopDomain,LastErrorInterpretación: NextHopDomain indica el destino, DeliveryType describe el mecanismo (p. ej. SMTP) y LastError suele ser la pista más rápida sobre problemas de DNS, TLS o red.
Filtrar únicamente colas sospechosas
# Filter: nicht 'Ready' oder viele Nachrichten
Get-Queue | Where-Object { $_.Status -ne 'Ready' -or $_.MessageCount -gt 50 } |
Sort-Object MessageCount -Descending | Select-Object Identity,Status,MessageCount,NextHopDomain,LastErrorValiosa es la observación de tendencias: un pico aislado puede ser tolerable; un aumento progresivo indica problemas persistentes.
Comprobar patrones de mensajes: uso pertinente de Get-Message
Una vez identificada una cola, analice los mensajes para detectar patrones (mismo dominio destinatario, mismo LastError, adjuntos grandes):
# Mostrar mensajes de una cola
$queueId = "SERVER01123" # ajustar
Get-Message -Queue $queueId | Select-Object Identity,Status,Size,FromAddress,Recipients,LastError
# Agrupar errores
Get-Message -Queue $queueId | Group-Object LastError | Sort-Object Count -Descending | Select-Object -First 10 Count,NameSi muchas entradas muestran el mismo LastError, la causa suele ser de infraestructura; si hay pocos resultados individuales, la eliminación selectiva puede ser una opción.
Pruebas prácticas para DNS, red y TLS
Muchas incidencias pueden acotarse con pruebas de red sencillas. Utilice las herramientas disponibles para no borrar a ciegas.
# Resolución DNS (Windows PowerShell)
Resolve-DnsName -Name example.com -Type MX
# Alternativa: nslookup en CMD
# nslookup -type=mx example.com
# Probar conectividad TCP (Puerto 25)
Test-NetConnection -ComputerName mail.example.com -Port 25
# Prueba específica de Exchange (en Mailbox/Hub-Server)
Test-SmtpConnectivity -Identity "SERVER01" -Port 25 -UseSSL:$falsePara diagnósticos TLS use Test-SmtpConnectivity con parámetros TLS o OpenSSL (si está disponible) para comprobar cifrados y detalles del certificado. Los problemas TLS suelen aparecer tras cambios de certificado, certificados intermedios faltantes o por TLS Inspection en firewalls.
Controlar el estado del transporte y del sistema
Antes de manipular mensajes, compruebe el estado de servicios y del sistema, así como los registros de eventos:
# Comprobar servicios de transporte de Exchange
Get-Service MSExchangeTransport, MSExchangeFrontEndTransport | Select-Object Name,Status,StartType
# Chequeo rápido de salud
Test-ServiceHealth | Format-List
# Entradas relevantes del Eventlog de las últimas 4 horas
$since = (Get-Date).AddHours(-4)
Get-WinEvent -FilterHashtable @{LogName='Application'; StartTime=$since} |
Where-Object { $_.ProviderName -match 'MSExchange|Exchange' } |
Select-Object TimeCreated,ProviderName,Id,LevelDisplayName,Message |
Sort-Object TimeCreated -Descending | Select-Object -First 50Atienda a los mensajes de Backpressure en el Eventlog: son indicio de cuellos de botella de recursos que no se solucionan eliminando mensajes individuales.
Message Tracking como herramienta de investigación
Para entender cómo llegaron los mensajes a la cola y qué trayectorias siguieron, utilice los logs de Message Tracking:
# Ejemplo: tracking para un Id de mensaje específico o remitente
Get-MessageTrackingLog -Sender "alice@example.local" -Start (Get-Date).AddHours(-6) -End (Get-Date) |
Select-Object Timestamp,ClientHostname,ServerHostname,EventId,Recipients,Source
# Búsqueda por MessageId
Get-MessageTrackingLog -MessageId "" -ResultSize 50Message Tracking también ayuda a recuperar, si procede, mensajes eliminados o a acotar el intervalo temporal afectado para backups.
Retry como primera medida activa tras solventar la causa
Cuando DNS, firewall o certificados estén reparados, debería usar Retry primero en lugar de eliminar. Retry inicia nuevos intentos de entrega.
# Retry de una cola
Retry-Queue -Identity $queueId
# Precaución con el Retry masivo: atender a rate-limits y carga
Get-Queue | Where-Object { $_.Status -eq 'Retry' } | ForEach-Object { Retry-Queue -Identity $_.Identity }Si la causa persiste, Retry solo genera tráfico y puede provocar rate-limits en el destino — compruébelo antes.
Ejecutar la eliminación selectiva de forma segura
Remove-Message es definitivo. Trabaje con un dry-run, exportación y autorización:
# Kandidaten selektieren und exportieren (Dry-Run)
$toRemove = Get-Message -Queue $queueId | Where-Object { $_.Recipients -match '@example.com' -and $_.Size -gt 10MB }
$toRemove | Select-Object Identity,FromAddress,Recipients,Size,Status,LastError | Export-Csv C:tempqueue-candidates.csv -NoTypeInformation
# Entfernen nach Autorisierung und Dokumentation
$toRemove | ForEach-Object { Remove-Message -Identity $_.Identity -WithNDR $false -Confirm:$false }
# Hinweis: -WithNDR $false unterbindet automatische NDRs; wählen Sie entsprechend Ihrer PolicyAntes de eliminar, compruebe: ¿existe journaling? ¿Hay una copia en el archivo central? Realice eliminaciones solo con el consentimiento del propietario del incidente.
Tratar correctamente las Poison Messages
Una Poison Message es un mensaje que provoca errores de manera repetida y perturba los procesos de transporte locales. Elimine esos mensajes de forma selectiva y examine los agentes de transporte que están procesando el mensaje de forma incorrecta.
# Poison-Messages identifizieren (Beispiel: viele Wiederholungen oder Crashs)
Get-Message -Queue $queueId | Where-Object { $_.DeliveryPriority -eq 'Highest' -and $_.LastError -match 'poison' }
# Entfernen nach Prüfung
Get-Message -Queue $queueId | Where-Object { $_.LastError -match 'poison' } | ForEach-Object { Remove-Message -Identity $_.Identity -Confirm:$false }Investigue a continuación de forma activa los agentes de transporte, posibles filtros de contenido o sistemas internos que hayan generado el mensaje.
Suspend/Resume: Mitigar en lugar de eliminar
Si solo partes del flujo de correo están problemáticas, ponga en pausa las colas afectadas o mensajes individuales para evitar efectos colaterales:
# Queue pausieren/fortsetzen
Suspend-Queue -Identity $queueId
# Nach Behebung
Resume-Queue -Identity $queueId
# Einzelne Nachricht pausieren
Suspend-Message -Identity ""
Resume-Message -Identity ""Esto resulta útil, por ejemplo, si desea detener un feed de aplicación defectuoso mientras otros correos continúan siendo procesados.
Automatisierung: Queue-Watch als dauerhaftes Monitoring
Evite reincidencias mediante monitorización de tendencias. Un script sencillo de PowerShell que compruebe las longitudes de las colas y alerte al superar un umbral suele ser suficiente.
# Einfaches Alert-Skript: prüft Top-Queue und schreibt Eventlog bei Überschreitung
$threshold = 200
$top = Get-Queue | Sort-Object MessageCount -Descending | Select-Object -First 1
if ($top.MessageCount -gt $threshold) {
$msg = "High queue on $($top.Identity): $($top.MessageCount) messages"
Write-EventLog -LogName Application -Source "MSExchangeTransport" -EventId 10001 -EntryType Warning -Message $msg
# Optional: E-Mail senden oder Ticket öffnen
}
En entornos productivos, integre estas comprobaciones en su monitorización (Zabbix, Prometheus, SCOM) y cree alertas basadas en la subida de la tendencia, no solo en umbrales absolutos.
Estrategia de rollback y forense
Si ha eliminado mensajes, normalmente no existe una vía directa para su restauración, salvo por:
- Journaling/archivo: búsqueda y restauración a través del sistema de archivo
- Backups: comprobar el alcance y la ventana de retención
- Message Tracking Logs: trazas para auditoría y reconstrucción
Documente siempre: quién eliminó, qué Identity y por qué — esto es importante para cumplimiento y para las decisiones de restauración.
Errores comunes y cómo evitarlos
Buenas prácticas operativas
- Monitorización basada en tendencias de las longitudes de las colas y alertas por tasas de crecimiento.
- Comprobaciones periódicas de DNS y TLS para smarthosts y destinatarios MX externos.
- Gestión de cambios para certificados con enrutamiento de prueba en un entorno de staging.
- Documentación de la topología de conectores, SourceTransportServers y escenarios de failover.
Conclusión
Las Exchange-Transport-Queues son tanto un indicador de advertencia como un punto de control. Si desea Exchange 2019 Mailfluss reparieren, trabaje de forma estructurada: identifique las Top-Queues, agrupe los patrones LastError, compruebe el estado del sistema y de la red y aplique primero Retry o Suspend. Elimine mensajes solo de forma selectiva, documentada y con una estrategia de reversión. Con monitorización, disciplina de cambios para TLS/DNS y runbooks de incidentes claros reducirá significativamente la probabilidad de nuevos atascos.
Esta guía proporciona la base operativa; en caso de duda incorpore a su equipo de Change o de Security, especialmente ante problemas con certificados, firewalls o alimentadores automatizados.
Operación, arquitectura y riesgos de integración — perspectivas adicionales
Además del análisis clásico de colas, debe considerar la arquitectura y los sistemas colindantes: Exchange rara vez está solo — los escáneres antivirus, los Transport‑Agents, la autenticación de Smarthosts y el sistema de archivos de los datos de la cola influyen en el comportamiento, el rendimiento y los riesgos. A continuación, comprobaciones prácticas, medidas de precaución y reglas de automatización que ayudan a evitar efectos secundarios al intervenir en las Transport‑Queues.
Queue‑Daten und Storage: prüfen statt raten
Las colas residen físicamente en el Transport‑Server. Un disco lleno o de respuesta lenta genera Backpressure y prolonga los intentos de entrega. Compruebe la ruta y el espacio libre antes de emprender acciones operativas:
# Standard-Queue-Pfad prüfen und Volume-Freigaben anzeigen
$queuePath = 'C:Program FilesMicrosoftExchange ServerV15TransportRolesdataQueue'
Test-Path $queuePath
Get-ChildItem -Path $queuePath -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object @{Name='SizeMB';Expression={[math]::Round($_.Sum/1MB,2)}}
(Get-PSDrive -Name (Split-Path $queuePath -Qualifier)).FreeMedida: coloque los datos de la cola en un volumen separado supervisado de forma eficiente y configure excepciones AV para esta ruta, para evitar bloqueos de archivos por On‑Access‑Scans.
Transport‑Agents und Drittanbieterintegrationen
Los Drittanbieter‑Agents (Content‑Filter, DLP, Archivierung) se ejecutan dentro de la Transport‑Pipeline y pueden procesar o bloquear mensajes. Desactívelos temporalmente para probar si son la causa:
Get-TransportAgent | Select-Object Name,Enabled
# Agent temporär deaktivieren
Disable-TransportAgent -Identity "AgentName"
# Nach Tests wieder aktivieren
Enable-TransportAgent -Identity "AgentName"Atención: la desactivación modifica el Mailflow. Pruebe en ventanas con poco tráfico y documente los cambios.
Reinicios escalonados y aislamiento de hosts
Un reinicio del servicio de transporte puede ayudar en una topología de varios servidores a resolver conexiones colgadas. No obstante, planifique los despliegues para que la carga no se traslade a un único host:
- Retire los hosts del pool del Load‑Balancer/Connector de uno en uno, realice el RESTart y observe las tendencias de la Queue.
- Evite reiniciar simultáneamente todos los Hub‑Transporter; de lo contrario se generará una congestión general.
Si es posible: excluya temporalmente el servidor de transporte afectado del enrutamiento (p. ej., ajustando la prioridad del Connector) y deje que otros servidores asuman la carga.
RBAC, auditoría y gobernanza de cambios
Operaciones como Remove‑Message son sensibles. Verifique permisos y registre las acciones:
# Wer darf Nachrichten verändern? RBAC prüfen
Get-ManagementRoleAssignment -RoleAssignee "IHR-ADMIN-ACCOUNT" | Where-Object {$_.Role -like '*Message*'} | Format-Table
# Export zur Dokumentation
Get-Message -Queue $queueId | Select Identity,FromAddress,Recipients,Size,LastError | Export-Csv C:tempqueue-before-action.csv -NoTypeInformationRegistre quién autorizó qué y cuándo, y guarde las exportaciones de forma segura (Audit‑Repository).
Automatización: segura y controlada
La remediación automatizada debe respetar Circuit‑Breaker y límites de tasa. Ejemplo: disparar reintentos por lotes con pausas para no saturar los MTAs de destino:
Get-Queue | Where-Object { $_.MessageCount -gt 0 } | ForEach-Object -Begin{$i=0} -Process{
Retry-Queue -Identity $_.Identity
$i++
if ($i % 5 -eq 0) { Start-Sleep -Seconds 15 }
}Documente estas medidas en runbooks con pasos de Approval e integre las Alerts en el monitoreo central (p. ej., SCOM, Prometheus, Zabbix). Así evita impactos no deseados y dispone de evidencias limpias para forense y cumplimiento.
En este tema también son importantes la Cola de transporte de Exchange 2019 y la eliminación de mensajes colgados. La entrada sitúa estos aspectos de forma comprensible y muestra en qué debe fijarse en el trabajo diario.