Troubleshooting Email Delivery in
Exchange Hybrid
A Complete Guide: Message Trace,
Protocol Logs, and Real-World Error Resolution
Exchange 2019 Hybrid | Exchange Online | May 2026
1. Understanding the Hybrid Mail Flow Architecture
In an Exchange Hybrid
environment, mail flows through multiple components depending on the direction.
Understanding this architecture is the foundation of any troubleshooting
effort.
|
Direction |
Flow Path |
Key
Components |
|
EXO → On-Prem |
EXO → MX/Smarthost →
Edge/Mailbox → Recipient |
Outbound Connector in EXO,
Receive Connector on Edge/Mailbox |
|
On-Prem → EXO |
Mailbox → Send Connector →
EXO Protection |
Send Connector with
SmartHost, TLS Certificate |
|
On-Prem → Internet |
Mailbox → Send Connector →
Internet |
Internet Send Connector
with DNS Routing |
|
Internet → On-Prem |
Internet → MX Record →
Edge/Mailbox |
MX Record, Receive
Connector, Port 25 Forwarding |
2. Protocol Log — Enabling, Paths, and Reading
2.1 What are Protocol Logs?
Protocol logs record every SMTP
conversation between Exchange servers. They capture the full SMTP dialogue
including EHLO, STARTTLS, MAIL FROM, RCPT TO, DATA, and response codes. They
are the most powerful diagnostic tool available for mail flow issues.
2.2 Types of Protocol Logs
|
Log Type |
Server |
Path |
Purpose |
|
SmtpReceive |
Mailbox/Edge |
TransportRoles\Logs\FrontEnd\ProtocolLog\SmtpReceive |
Inbound SMTP connections |
|
SmtpSend |
Mailbox/Edge |
TransportRoles\Logs\FrontEnd\ProtocolLog\SmtpSend |
Outbound SMTP connections |
|
Hub SmtpReceive |
Mailbox |
TransportRoles\Logs\Hub\ProtocolLog\SmtpReceive |
Internal Hub receive |
|
Hub SmtpSend |
Mailbox |
TransportRoles\Logs\Hub\ProtocolLog\SmtpSend |
Internal Hub send |
|
Edge SmtpReceive |
Edge |
TransportRoles\Logs\Edge\ProtocolLog\SmtpReceive |
Edge inbound |
|
Edge SmtpSend |
Edge |
TransportRoles\Logs\Edge\ProtocolLog\SmtpSend |
Edge outbound |
2.3 Enabling Protocol Logging
Protocol logging must be enabled
on both Receive and Send connectors. By default it is set to None.
Enable on Receive Connectors (Mailbox Server):
|
#
Enable on Default Frontend connector Set-ReceiveConnector
'Default Frontend CMHYBD01' -ProtocolLoggingLevel Verbose #
Enable on all receive connectors at once Get-ReceiveConnector
| Set-ReceiveConnector -ProtocolLoggingLevel Verbose #
Verify Get-ReceiveConnector
| Select Name, ProtocolLoggingLevel | Format-List |
Enable on Send Connectors (Mailbox Server):
|
#
Enable on Outbound to Office 365 Set-SendConnector
'Outbound to Office 365' -ProtocolLoggingLevel Verbose #
Enable on all send connectors Get-SendConnector
| Set-SendConnector -ProtocolLoggingLevel Verbose #
Verify Get-SendConnector
| Select Name, ProtocolLoggingLevel | Format-List |
Enable on Edge Server:
|
#
On Edge - enable receive connector logging Set-ReceiveConnector
'Default internal receive connector CMEDGE01' -ProtocolLoggingLevel Verbose #
Set log path explicitly Set-TransportService
cmedge01 -ReceiveProtocolLogPath 'C:\Program Files\Microsoft\Exchange
Server\V15\TransportRoles\Logs\Edge\ProtocolLog\SmtpReceive' #
Restart transport to apply Restart-Service
MSExchangeTransport |
|
TIP: Important Always
restart MSExchangeTransport after changing protocol logging settings to
ensure the changes take effect immediately. |
2.4 Finding and Reading Protocol Logs with Tail Command
The -Tail parameter in
Get-Content shows only the last N lines of a log file, which is the most
efficient way to read large protocol logs in real time.
Get the Latest Log File and Read Last 30 Lines:
|
#
Define the log path $logPath
= 'C:\Program Files\Microsoft\Exchange
Server\V15\TransportRoles\Logs\FrontEnd\ProtocolLog\SmtpReceive' #
Get the most recent log file $latest
= Get-ChildItem $logPath | Sort LastWriteTime -Descending | Select -First 1 #
Read last 30 lines Get-Content
$latest.FullName -Tail 30 #
Watch log in REAL TIME (like Linux tail -f) Get-Content
$latest.FullName -Tail 10 -Wait |
Read Send Protocol Log:
|
$sendLog
= 'C:\Program Files\Microsoft\Exchange
Server\V15\TransportRoles\Logs\FrontEnd\ProtocolLog\SmtpSend' $latest
= Get-ChildItem $sendLog | Sort LastWriteTime -Descending | Select -First 1 Get-Content
$latest.FullName -Tail 50 |
|
TIP: Tail Limitation The -Tail
parameter reads from the END of the file. For very large log files, use -Wait
to monitor in real time. Note that a new log file is created each hour, so
always get the latest file first using Sort LastWriteTime -Descending |
Select -First 1. |
2.5 Understanding Protocol Log Format
Each line in a protocol log
contains these fields separated by commas:
|
Field |
Description |
Example |
|
date-time |
UTC timestamp |
2026-05-01T06:06:57.291Z |
|
connector-id |
Connector handling the
session |
CMHYBD01\Default Frontend
CMHYBD01 |
|
session-id |
Unique session identifier |
08DEA74796A6E2C8 |
|
sequence-number |
Line number in session |
21 |
|
local-endpoint |
Local IP:Port |
192.168.1.4:25 |
|
remote-endpoint |
Remote IP:Port |
40.93.131.26:31611 |
|
event |
+,-,>,<,* |
+ = connected, - =
disconnected, > = sent, < = received, * = info |
|
data |
SMTP command or response |
250 2.6.0 Queued mail for
delivery |
|
context |
Additional info |
TLS negotiation succeeded |
Reading a Real Session from Our Lab:
|
#
Example of a successful EXO → On-Prem delivery session: 2026-05-01T06:06:57.291Z,...,0,192.168.1.4:25,40.93.131.26:31611,+,, # EXO connected 2026-05-01T06:06:57.291Z,...,1,...,>,220
cmhybd01... ESMTP MAIL Service ready
# Banner sent 2026-05-01T06:06:57.291Z,...,2,...,<,EHLO
PNYPR01CU001.outbound.protection...
# EXO says hello 2026-05-01T06:06:57.291Z,...,3,...,>,250
... STARTTLS ...
# We offer TLS 2026-05-01T06:06:57.291Z,...,4,...,<,STARTTLS # EXO starts TLS 2026-05-01T06:06:57.291Z,...,5,...,*,TLS
negotiation succeeded
# TLS established 2026-05-01T06:06:57.291Z,...,22,...,>,250
2.6.0 Queued mail for delivery
# Mail accepted! |
2.6 Exporting Protocol Logs to CSV
For detailed analysis or sharing
with Microsoft support, export protocol logs to CSV format:
|
#
Export a specific protocol log to CSV $logPath
= 'C:\Program Files\Microsoft\Exchange
Server\V15\TransportRoles\Logs\FrontEnd\ProtocolLog\SmtpReceive' $latest
= Get-ChildItem $logPath | Sort LastWriteTime -Descending | Select -First 1 #
Import as CSV (skip header lines starting with #) $log
= Get-Content $latest.FullName | Where-Object {$_ -notmatch '^#'} |
ConvertFrom-Csv -Header
'DateTime','ConnectorId','SessionId','SequenceNumber','LocalEndpoint','RemoteEndpoint','Event','Data','Context' #
Filter for specific session or error $log
| Where-Object {$_.Data -like '*550*' -or $_.Data -like '*fail*'} |
Export-Csv 'C:\Logs\smtp_errors.csv' -NoTypeInformation #
Export all TLS failures $log
| Where-Object {$_.Context -like '*TLS*' -or $_.Data -like '*454*'} |
Export-Csv 'C:\Logs\tls_issues.csv' -NoTypeInformation #
Export specific IP session $log
| Where-Object {$_.RemoteEndpoint -like '*40.93.*'} | Export-Csv
'C:\Logs\exo_sessions.csv' -NoTypeInformation |
3. Message Tracking Logs
3.1 What is Message Tracking?
Message tracking logs record
every message event as it passes through the Exchange transport pipeline.
Unlike protocol logs (which show SMTP conversations), message tracking shows
high-level events like RECEIVE, SUBMIT, DELIVER, SEND, FAIL, and REDIRECT.
3.2 Message Tracking Event Types
|
Event |
Description |
What It
Means |
|
RECEIVE |
Message received by
transport |
Mail entered the transport
pipeline |
|
SUBMIT |
Message submitted to
transport |
Mail submitted from mailbox
store |
|
DELIVER |
Message delivered to
mailbox |
Mail successfully delivered |
|
SEND |
Message sent to next hop |
Mail handed off to next
server |
|
FAIL |
Delivery failed |
Mail could not be delivered |
|
REDIRECT |
Message redirected |
Mail redirected by rule or
policy |
|
RESOLVE |
Recipient resolved |
Recipient address resolved
in AD |
|
EXPAND |
Distribution group expanded |
DL membership expanded |
|
DEFER |
Delivery deferred |
Temporary delivery failure,
will retry |
|
DROP |
Message dropped |
Mail dropped by policy or
filter |
3.3 Message Tracking Commands
Basic Message Tracking:
|
#
Get all events in last 30 minutes Get-MessageTrackingLog
-Start (Get-Date).AddMinutes(-30) | Select Timestamp, EventId, Source,
MessageSubject, RecipientAddress | Format-List #
Filter by specific event type Get-MessageTrackingLog
-Start (Get-Date).AddMinutes(-30) -EventId DELIVER | Select Timestamp,
MessageSubject, RecipientAddress | Format-List #
Find failed messages Get-MessageTrackingLog
-Start (Get-Date).AddHours(-2) -EventId FAIL | Select Timestamp,
MessageSubject, RecipientAddress, RecipientStatus | Format-List #
Search by subject Get-MessageTrackingLog
-MessageSubject 'Test Email' -Start (Get-Date).AddHours(-1) | Format-List #
Search by sender Get-MessageTrackingLog
-Sender 'user@domain.com' -Start (Get-Date).AddHours(-1) | Format-List #
Search by recipient Get-MessageTrackingLog
-Recipients 'user@domain.com' -Start (Get-Date).AddHours(-1) | Format-List |
Export Message Tracking to CSV:
|
#
Export last 24 hours of failed deliveries to CSV Get-MessageTrackingLog
-Start (Get-Date).AddHours(-24) -EventId FAIL | Select Timestamp, EventId,
Source, MessageSubject, SenderAddress, RecipientAddress, RecipientStatus |
Export-Csv 'C:\Logs\failed_deliveries.csv' -NoTypeInformation #
Export all events for a specific sender Get-MessageTrackingLog
-Sender 'raghu@cloudmonkeys.xyz' -Start (Get-Date).AddDays(-1) | Export-Csv
'C:\Logs\sender_trace.csv' -NoTypeInformation #
Quick summary of mail flow Get-MessageTrackingLog
-Start (Get-Date).AddHours(-1) | Group-Object EventId | Select Name, Count |
Sort Count -Descending |
3.4 Exchange Online Message Trace
In Exchange Online, use
Get-MessageTrace or the EAC Message Trace tool to trace mail flow within EXO.
|
#
Connect to Exchange Online Connect-ExchangeOnline
-UserPrincipalName admin@cloudmonkeys.xyz #
Basic message trace Get-MessageTrace
-SenderAddress 'raghu@cloudmonkeys.xyz' -StartDate (Get-Date).AddHours(-2) |
Format-List Subject, Status, ToAddress, Received #
Trace by recipient Get-MessageTrace
-RecipientAddress 'ramki@cloudfield.onmicrosoft.com' -StartDate
(Get-Date).AddHours(-2) | Format-List #
Get detailed trace events $trace
= Get-MessageTrace -SenderAddress 'raghu@cloudmonkeys.xyz' -StartDate
(Get-Date).AddHours(-2) | Select -First 1 Get-MessageTraceDetail
-MessageTraceId $trace.MessageTraceId -RecipientAddress
$trace.RecipientAddress | Format-List #
Export to CSV Get-MessageTrace
-StartDate (Get-Date).AddHours(-24) -EndDate (Get-Date) | Export-Csv
'C:\Logs\exo_trace.csv' -NoTypeInformation |
4. Queue Management and Troubleshooting
4.1 Checking Mail Queues
|
#
View all queues Get-Queue #
View queue details Get-Queue
-Identity 'cmhybd01\6' | Format-List * #
View messages in a specific queue Get-Message
-Queue 'cmhybd01\6' | Format-List FromAddress, Recipients, Status, LastError #
Count messages per queue Get-Queue
| Select Identity, Status, MessageCount, NextHopDomain, LastError |
Format-Table |
4.2 Queue Status Types
|
Status |
Meaning |
Action |
|
Active |
Messages being delivered |
Normal — no action needed |
|
Ready |
Queue ready, waiting for
messages |
Normal |
|
Retry |
Temporary failure, will
retry |
Check LastError for reason |
|
Suspended |
Queue manually suspended |
Resume with Resume-Queue |
|
Unreachable |
No connector found for
domain |
Check send connector
address spaces |
4.3 Queue Retry and Resubmit Commands
|
#
Retry a specific queue Retry-Queue
-Identity 'cmhybd01\6' #
Retry and resubmit (reprocess from scratch) Retry-Queue
-Identity 'cmhybd01\6' -Resubmit $true #
Retry all queues Get-Queue
| Retry-Queue #
Resume a suspended queue Resume-Queue
-Identity 'cmhybd01\6' #
Suspend a queue (stop delivery) Suspend-Queue
-Identity 'cmhybd01\6' #
Remove all messages from a queue Remove-Message
-Queue 'cmhybd01\6' -WithNDR $false -Confirm:$false |
5. Real-World Errors Encountered and Resolved
The following section documents
every error encountered during a real Exchange 2019 Hybrid lab troubleshooting
session, along with the exact fix applied. All errors and fixes are taken
directly from live diagnostic sessions.
Error 1: Mail Stuck in Drafts — Never Entering Queue
|
ERROR: Mail never leaves
Outlook/OWA — Get-Queue shows Submission with 0 messages Symptom: Mail sent from
on-prem mailbox goes to Sent Items but never appears in transport queue |
Diagnosis Steps:
|
Get-Queue Get-Service
MSExchangeTransport, MSExchangeSubmission | Select Name, Status Get-MailboxDatabase
-Status | Select Name, Mounted, Server |
|
FIX: Check and Restart
Transport Services Restart-Service
MSExchangeSubmission Restart-Service MSExchangeTransport Verify all
MSExchange* services are Running |
Error 2: EdgeSync LDAP Unavailable
|
ERROR:
Test-EdgeSynchronization -FullCompareMode returns SyncStatus: Failed FailureDetail: EdgeSync
service cannot connect to this subscription because of error 'The LDAP server
is unavailable.' CredentialRecords: Number of credentials 0 |
Root Cause: The ADAM (AD LDS)
database on the Edge server was corrupt or empty. CredentialRecords showing 0
confirmed the bootstrap credential exchange never completed.
|
#
Verify ADAM is running Get-Service
ADAM_MSExchange | Select Name, Status #
Test LDAP port connectivity from Mailbox server Test-NetConnection
-ComputerName cmedge01.cloudmonkeys.xyz -Port 50389 Test-NetConnection
-ComputerName cmedge01.cloudmonkeys.xyz -Port 50636 #
Test ADAM database access $root
= [ADSI]'LDAP://localhost:50389/CN=MSExchangeTransportService,CN=First
Organization,...' $root.PSBase.Children
| Select Name, ObjectClass #
Error: 'An operations error occurred' = ADAM database corrupt |
|
FIX: Re-subscribe Edge
Server 1.
Remove-EdgeSubscription -Identity cmedge01 -Confirm:$false 2.
New-EdgeSubscription -FileName 'C:\EdgeSub.xml' -Force (on Edge) 3. Copy XML
to Mailbox server 4. New-EdgeSubscription -FileData ([byte[]]$(Get-Content
-Path 'C:\EdgeSub.xml' -Encoding Byte -ReadCount 0)) -Site
'Default-First-Site-Name' 5. Start-EdgeSynchronization -Server CMHYBD01 |
Error 3: ADAM Service Fails to Start After Database Deletion
|
ERROR: EventID 7023: ADAM
service terminated with error %%3221225487 (0xC000000F) The system cannot find
the file specified — ADAM database files were deleted but ADAM cannot
reinitialize from scratch |
|
FIX: Reinstall ADAM
Instance Using Exchange Answer File 1. Run
adamuninstall.exe /instancename:MSExchange /unattend 2. Populate AdamInstallAnswer.ini
with correct values from registry 3. Run adaminstall.exe
/answer:AdamInstallAnswer.ini /quiet 4. If still failing, reinstall Edge
Transport role via Setup.exe |
Error 4: Exchange Setup Fails — Missing Registry Keys
|
ERROR: Setup Step 6 of 8
fails: The registry key 'SOFTWARE\Microsoft\ExchangeServer\v15\Transport'
does not exist Setup.exe /Mode:Install
/Roles:EdgeTransport fails partway through when registry was previously
cleaned |
|
FIX: Create Required
Registry Keys Before Setup reg add
'HKLM\SOFTWARE\Microsoft\ExchangeServer\v15\Transport' /f reg add
'HKLM\SOFTWARE\Microsoft\ExchangeServer\v15\Pickup' /f reg add
'HKLM\SOFTWARE\Microsoft\ExchangeServer\v15\Gateway' /f (repeat for all
required subkeys) |
Error 5: ASDat.MSI Installation Fails with Error 1603
|
ERROR: Installing product
ASDat.MSI failed. Fatal error. Error code 1603 Anti-spam MSI package
corrupt or broken Windows Installer registration from previous failed install |
|
FIX: Pre-install Hygiene
MSIs from Exchange ISO 1. Find MSIs:
E:\Setup\ServerRoles\TransportRoles\agents\Hygiene\ 2. Copy ASDat.MSI,
ASEntIRS.MSI, ASEntSig.MSI to local path 3. msiexec.exe /i ASDat.MSI
ALLUSERS=1 /qn 4. Repeat for ASEntIRS.MSI and ASEntSig.MSI 5. Re-run Exchange
setup |
Error 6: EXO Connector Validation Fails — SubjectMismatch
|
ERROR: 450 4.4.317 Cannot
establish session — SubjectMismatch. Expected: mail.cloudmonkeys.xyz,
Presented: CN=cmedge01.cloudmonkeys.xyz Edge server presenting
wrong TLS certificate during EXO connection. Multiple certs with SMTP service
causing incorrect cert selection |
|
FIX: Remove Wrong Certs and
Set Correct FQDN 1.
Remove-ExchangeCertificate for all wrong certs 2. Keep only mail.cloudmonkeys.xyz
(Let's Encrypt cert) 3. Enable-ExchangeCertificate -Thumbprint
<correct> -Services SMTP -Force 4. Set-ReceiveConnector 'Default
internal...' -Fqdn 'mail.cloudmonkeys.xyz' 5. Restart-Service
MSExchangeTransport |
Error 7: PRX2 — DNS Query Failed During Internal Proxy
|
ERROR: 451 4.7.0 Temporary
server error. PRX2 — DNS query failed with error ErrorRetry ->
DnsQueryFailed: ErrorRetry Frontend Transport
cannot resolve internal hostname when proxying inbound mail. Caused by
multiple DNS servers including public NIC ISP DNS |
|
#
Diagnosis Get-TransportService
CMHYBD01 | Select InternalDNSServers, ExternalDNSServers | Format-List #
Found: InternalDNSServers: {202.88.152.10, 202.88.152.8, 192.168.1.11} <- ISP DNS mixed in! |
|
FIX: Set Explicit Internal
and External DNS Servers Set-TransportService
CMHYBD01 -InternalDNSServers '192.168.1.11' -InternalDNSAdapterEnabled $false
Set-TransportService CMHYBD01 -ExternalDNSServers '8.8.8.8','8.8.4.4'
-ExternalDNSAdapterEnabled $false Set-FrontendTransportService CMHYBD01
-InternalDNSServers '192.168.1.11' -InternalDNSAdapterEnabled $false
Set-FrontendTransportService CMHYBD01 -ExternalDNSServers '8.8.8.8','8.8.4.4'
-ExternalDNSAdapterEnabled $false |
Error 8: Mail to EXO Goes to Unreachable Domain Queue
|
ERROR: A matching connector
cannot be found to route the external recipient Recipients at
cloudfield.onmicrosoft.com land in Unreachable queue because no send
connector covers that address space |
|
#
Diagnosis Get-Message
-Queue cmhybd01\Unreachable | Format-List FromAddress, Recipients, Subject #
Recipients: ramki@cloudfield.onmicrosoft.com — No Matching Connector #
Check send connectors Get-SendConnector
| Format-List Name, AddressSpaces #
Found: cloudfield.mail.onmicrosoft.com covered but NOT
cloudfield.onmicrosoft.com |
|
FIX: Add Missing Address
Space to Send Connector Set-SendConnector
'Outbound to Office 365' -AddressSpaces
'smtp:cloudmonkeys.xyz;1','smtp:cloudfield.onmicrosoft.com;1' Retry-Queue
cmhybd01\Unreachable -Resubmit $true |
Error 9: 550 5.7.1 Client Host Blocked by Spamhaus
|
ERROR: 550 5.7.1 Service
unavailable, Client host [27.7.57.241] blocked using Spamhaus Public IP address on
Spamhaus PBL (Policy Block List) — common for residential/business ISP IPs |
|
FIX: Request PBL Removal
and Use Temporary Workaround Short term:
Set-SendConnector 'Outbound to Office 365' -SmartHosts 'smtp.office365.com'
Long term: Request removal at https://www.spamhaus.org/removal/ PBL removal
is usually instant for legitimate IPs |
Error 10: EXO Outbound Connector TLS Certificate Mismatch
|
ERROR: 454 4.7.5
Certificate validation failure, Reason: SubjectMismatch Mailbox server
presenting certificate that doesn't match the TlsDomain configured on the
send connector |
|
#
Diagnosis Get-SendConnector
'Outbound to Office 365' | Format-List TlsDomain, TlsAuthLevel, Fqdn #
TlsDomain: cloudmonkeys.xyz <-
Wrong! Should match EXO cert |
|
FIX: Set Correct TlsDomain
and FQDN on Send Connector Set-SendConnector
'Outbound to Office 365' -TlsAuthLevel DomainValidation -TlsDomain
'mail.protection.outlook.com' -Fqdn 'mail.cloudmonkeys.xyz' |
6. DNS Configuration Best Practices for Hybrid
|
DNS Record |
Type |
Value |
Purpose |
|
cloudmonkeys.xyz |
MX |
cloudmonkeys-xyz.mail.protection.outlook.com
(Priority 0) |
Inbound mail routes to EXO |
|
mail.cloudmonkeys.xyz |
A |
27.7.57.241 (Public IP) |
External SMTP endpoint |
|
autodiscover.cloudmonkeys.xyz |
A/CNAME |
Public IP or
autodiscover.outlook.com |
Outlook auto-configuration |
|
cmedge01.cloudmonkeys.xyz |
A (Internal) |
192.168.1.25 |
Internal resolution of Edge
server |
|
cmhybd01.cloudmonkeys.xyz |
A (Internal) |
192.168.1.13 |
Internal resolution — do
NOT register public NIC |
Split DNS Configuration (Critical for Hybrid):
|
#
Internal DNS (DC) should resolve servers to INTERNAL IPs #
External DNS (GoDaddy/public) should resolve mail.cloudmonkeys.xyz to PUBLIC
IP #
Prevent public NIC from registering in DNS Set-DnsClient
-InterfaceAlias 'Pub' -RegisterThisConnectionsAddress $false ipconfig
/registerdns #
Set transport to use DC for internal, Google for external Set-TransportService
CMHYBD01 -InternalDNSServers '192.168.1.11' -InternalDNSAdapterEnabled $false Set-TransportService
CMHYBD01 -ExternalDNSServers '8.8.8.8','8.8.4.4' -ExternalDNSAdapterEnabled
$false |
7. Quick Reference — Common SMTP Response Codes
|
Code |
Meaning |
Common
Cause in Hybrid |
|
220 |
Service ready |
Normal — server ready to
accept |
|
250 |
OK / Success |
Command accepted
successfully |
|
251 |
User not local — will
forward |
Recipient in another domain |
|
354 |
Start mail input |
Ready to receive message
body |
|
421 |
Service temporarily
unavailable |
Server overloaded or
maintenance |
|
450 |
Mailbox unavailable — try
again |
Temporary failure, will
retry |
|
451 4.4.0 |
DNS query failed |
Transport DNS misconfigured |
|
451 4.7.0 |
PRX2 — Temp server error |
Frontend proxy DNS failure |
|
454 4.7.5 |
Certificate validation
failure |
TLS cert mismatch or
SubjectMismatch |
|
500 |
Syntax error |
Invalid SMTP command |
|
503 5.5.2 |
Send hello first |
EHLO not sent before
STARTTLS |
|
504 5.7.4 |
Unrecognized auth type |
AUTH attempted without TLS |
|
550 5.7.1 |
Rejected — policy |
Spamhaus or blacklist block |
|
550 5.7.64 |
TenantAttribution |
EXO connector not matching |
|
554 5.4.14 |
Hop count exceeded |
Mail routing loop |
8. Troubleshooting Checklist
When Mail is Stuck in Drafts (On-Prem):
1.
Check all MSExchange* services are Running
2.
Verify mailbox databases are Mounted:
Get-MailboxDatabase -Status
3.
Check submission queue: Get-Queue
4.
Restart MSExchangeSubmission and MSExchangeTransport
5.
Check send connector address spaces cover recipient
domain
6.
Check external DNS servers are set on transport service
When EXO Mail Not Reaching On-Prem:
7.
Verify MX record points to EXO protection
8.
Check port 25 forwarding on router to correct internal
IP
9.
Validate EXO Outbound Connector:
Validate-OutboundConnector
10. Check
TLS certificate on receive connector matches expected FQDN
11. Enable
protocol logging and check SmtpReceive log for connection attempts
12. Verify
internal DNS resolves hostnames correctly
When EdgeSync Fails:
13. Check
ADAM service is running: Get-Service ADAM_MSExchange
14. Test
LDAP ports: Test-NetConnection -Port 50389 and 50636
15. Run
Test-EdgeSynchronization -FullCompareMode
16. Check
CredentialRecords — if 0, re-subscription needed
17. Verify
firewall rules allow ports 50389 and 50636
18. Check
DNS resolution of Edge server FQDN from Mailbox server
— End of Document —
Comments
Post a Comment