ExternalEmailAddress

Auf dieser Seite gehe ich auf ein Fehlverhalten von Exchange Online im Hybrid Mode mit Remote Domains ein. Der Fehler wurde durch den HCW vor Sep 2020 eingeführt und mit dem Update Sp2020 korrigiert. Lesen Sie dazu auch die Seiten TargetAddress, ForwardingSmtpAddress und Weiterleitungen

Es ist immer eine gute Idee, die Updates des HCW zu verfolgen und ggfls. den HCW erneut durchzuführen.

Regelfall

Bei einer Exchange Hybrid Konfiguration sorgt ADSync für den Abgleich der Identitäten und verwaltet die Objekte in Exchange Online auch hinsichtlich ihrer Mailadressen. Sie wissen sicher alle, dass aktuell (Okt 2020) viele Exchange -Einstellungen in der Cloud "ReadOnly" sind, solange der Verzeichnisabgleich eingerichtet ist. Das führt dazu dass es zu jedem lokalen Exchange Objekt auch ein Cloud-Objekte mit entsprechenden Feldern gibt. Über "Get-Recipient" habe ich die Werte auf beiden Seiten jeweils ausgelesen.

Achten Sie bei dem Lesen auf das Feld "ExternalEmailAddress"

On-Premises Exchange Online

Mailbox

Dieser Benutzer hat ein Postfach auf dem lokalen Exchange Server

[PS] C:\>Get-Recipient On-Prem | fl

Identity                   : msxfaq.de/Users/OnPrem
Alias                      : On-Prem ArchiveGuid                : 00000000-0000-0000-0000-000000000000
AuthenticationType         : 
Database                   : Mailboxes
ArchiveDatabase            :
DatabaseName               : Databases\Mailboxes
Department                 :
ExternalDirectoryObjectId  :
EmailAddresses             : {smtp:OnPrem@msxfaq.de, x500:/o=ExchangeLabs/
                             ou=Exchange Administrative
                             Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=xxx-
                             OnPremFrank, smtp:OnPrem@msxfaq.net,
                             smtp:OnPrem@msxfaq.de...}
ExpansionServer            :
ExternalEmailAddress       :
DisplayName                : On-Prem ObjectCategory             : msxfaq.de/Configuration/Schema/Person
OrganizationalUnit         : msxfaq.de/Users
PrimarySmtpAddress         : OnPrem@msxfaq.de
RecipientType              : UserMailbox
RecipientTypeDetails       : UserMailbox
SamAccountName             : On-Prem ServerLegacyDN             : /o=MSXFAQ/ou=Exchange Administrative Group
                             (FYDIBOHF23SPDLT)/cn=Configuration/
                             cn=Servers/cn=SRVEX16
ServerName                 : SRVEX16
StorageGroupName           : Databases
UsageLocation              :
ExchangeGuid               : 9a52c2f7-0d1f-497d-8078-xxxx
ExchangeVersion            : 0.20 (15.0.0.0)
DistinguishedName          : CN=Carius\, Frank Demo 4,CN=Users,DC=msxfaq,DC=de
Guid                       : e7e6e3b1-b2c5-412d-8c1d-xxxx
ObjectClass                : {top, person, organizationalPerson, user}
Id                         : msxfaq.de/Users/OnPrem

MailUser

In Exchange Online erscheint das Konto als MailUser.

PS C:\> Get-Recipient On-Prem |fl

Identity                   : On-Prem Alias                      : frank.carius4
ArchiveGuid                : 00000000-0000-0000-0000-000000000000
AuthenticationType         : Managed
Database                   :
ArchiveDatabase            :
DatabaseName               :
ExternalDirectoryObjectId  : cc26eeec-eaae-4226-9ba6-xxxx
EmailAddresses             : {SIP:OnPrem@msxfaq.de, SMTP:OnPrem@msxfaq.de,...}
ExpansionServer            :
ExternalEmailAddress       : SMTP:OnPrem@msxfaq.de
DisplayName                : On-Prem ObjectCategory             : EURPR04A003.prod.outlook.com/Configuration/Schema/Person
OrganizationalUnit         : eurpr04a003.prod.outlook.com/Microsoft Exchange 
                             Hosted Organizations/msxfaq.onmicrosoft.com
PrimarySmtpAddress         : OnPrem@msxfaq.de
RecipientType              : MailUser
RecipientTypeDetails       : MailUser
SamAccountName             : fran55011
UsageLocation              : Deutschland
ExchangeGuid               : 9a52c2f7-0d1f-497d-8078-xxxx
ExchangeVersion            : 1.1 (15.0.0.0)
DistinguishedName          : CN=OnPrem,OU=msxfaq.onmicrosoft.com,OU=Microsoft
                             Exchange Hosted Organizations,DC=EURPR04A003,
                             DC=prod,DC=outlook,DC=com
ObjectClass                : {top, person, organizationalPerson, user}
ExchangeObjectId           : 4f2db471-458b-41d8-bb7f-xxxx
OrganizationId             : EURPR04A003.prod.outlook.com/Microsoft Exchange 
                             Hosted Organizations/msxfaq.onmicrosoft.com - 
                             EURPR04A003.prod.outlook.com/ConfigurationUnits/
                             msxfaq.onmicrosoft.com/Configuration
Id                         : On-Prem Guid                       : 4f2db471-458b-41d8-bb7f-xxxx
OriginatingServer          : VI1PR04A03DC001.EURPR04A003.prod.outlook.com
IsValid                    : True
ObjectState                : Unchanged

Remote Mailbox

Dieser Benutzer hat ein Postfach in Exchange Online. Entsprechend ist es eine "Remote Mailbox" im lokalen Exchange Server. Das Konto hat z.B. keine MailboxGUID und keinen Homeserver aber andere Werte.

[PS] C:\>Get-Recipient frank.carius@msxfaq.de | fl

Identity                   : msxfaq.de/Users/EXOUser
Alias                      : EXOUser
ArchiveGuid                : d990201b-ce0d-40f8-a5f8-xxx
CountryOrRegion            : Germany
ArchiveDatabase            :
DatabaseName               :
ExternalDirectoryObjectId  :
ManagedFolderMailboxPolicy :
EmailAddresses             : {sip:EXOUser@msxfaq.de, x500:/o=ExchangeLabs/
                             ou=Exchange Administrative Group (FYDIBOHF23SPDLT)
                             /cn=Recipients/cn=xxx-Carius,
                             (FYDIBOHF23SPDLT)/cn=Recipients
                             /cn=1xxx, SMTP:EXOUser@Msxfaq.de,...}
ExternalEmailAddress       : SMTP:EXOUser@msxfaq.mail.onmicrosoft.com
DisplayName                : EXOUser
ObjectCategory             : msxfaq.de/Configuration/Schema/Person
OrganizationalUnit         : msxfaq.de/Users
PrimarySmtpAddress         : EXOUser@Msxfaq.de
RecipientType              : MailUser
RecipientTypeDetails       : RemoteUserMailbox
SamAccountName             : EXOUser
ServerLegacyDN             :
ServerName                 :
ExchangeGuid               : e6721880-50d5-41a6-960c-xxx
DistinguishedName          : CN=EXOUser,CN=Users,DC=msxfaq,DC=de
ObjectClass                : {top, person, organizationalPerson, user}
OriginatingServer          : SRVDC01.msxfaq.de

Mailbox

In Exchange Online erscheint das Konto natürlich als als Mailbox ohne ExternalEmailAddress

PS C:\> Get-Recipient frank.carius@msxfaq.de | fl

Identity                   : EXOUser
Alias                      : EXOUser
ArchiveGuid                : d990201b-ce0d-40f8-a5f8-xxx
AuthenticationType         : Managed
CountryOrRegion            : Deutschland
ExternalDirectoryObjectId  : b39bb717-ea64-46cd-ab57-xxx
EmailAddresses             : {x500:/o=ExchangeLabs/ou=Exchange Administrative
                             Group (FYDIBOHF23SPDLT)/cn=Recipients/
                             cn=xxx-EXOUser,smtp:EXOUser@msxgaq.de...}
ExternalEmailAddress       :
DisplayName                : EXOUser
ObjectCategory             : EURPR04A003.prod.outlook.com/Configuration/Schema/Person
OrganizationalUnit         : eurpr04a003.prod.outlook.com/Microsoft Exchange 
                             Hosted Organizations/msxfaq.onmicrosoft.com
PrimarySmtpAddress         : EXOUser@Msxfaq.de
RecipientType              : UserMailbox
RecipientTypeDetails       : UserMailbox
SamAccountName             : $LT0O10-0EGE61GCSO9N
ServerLegacyDN             : /o=ExchangeLabs/ou=Exchange Administrative Group
                             (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/
                             cn=VI1PR0402MB3646
ServerName                 : vi1pr0402mb3646
ExchangeGuid               : e6721880-50d5-41a6-960c-xxx
DistinguishedName          : CN=EXOUser,OU=msxfaq.onmicrosoft.com,OU=Microsoft 
                             Exchange Hosted Organizations,DC=EURPR04A003,
                             DC=prod,DC=outlook,DC=com
ObjectClass                : {top, person, organizationalPerson, user}
OriginatingServer          : VI1PR04A03DC001.EURPR04A003.prod.outlook.com

Es gibt natürlich noch andere Objekte, z.B. Kontakte, Verteilerlisten etc., die hier aber nicht weiter betrachtet werden. Denken Sie daran, dass die "ProxyAddresses" übertragen werden, wobei in der Cloud einige Adressen fehlen. Wichtig ist aber die Erkenntnis über das Feld ExternalEmailAddress.

  • OnPrem
    Lokal ist das Feld leer und in der Cloud verweist der Inhalt auf die primäre SMTP-Adresse
  • EXOMailbox
    Hier ist das Feld in der Cloud leer und On-Premises verweist die Adresse auf die "@<tenantname>.onmicrosoft.com"-Adresse

Den Rest machen dann die Exchange Server über die SMTP-Connectoren für das Mailrouting, das OrganizationRelationsship für Free/Busy-Abfragen und Autodiscover-Auflösung ab.

Fehlerfall

In dem Fehlerfall war es nun so, dass eine On-Premises Mailbox nicht erreichbar war, weil das Objekt in der Cloud nicht die primäre SMTP-Adresse im Feld "ExternalEmailAddress" hatte. Noch mal zur Sicherheit: Eine Abfrage mit "Get-Recipient" gegen die Exchange Online PowerShell lieferte ein:

Falsch : ExternalEmailAddress = user@<tenantname>.mail.onmicrosoft.com

Richtig wäre aber:

Richtig: ExternalEmailAddress = user@firmenname.tld

Spurensuche

Alle Analysen mit ADSync und anderen Tools ergaben, dass das lokale AD-Objekt korrekt als "Mailbox" konfiguriert ist und ADSync die Daten auch korrekt und fehlerfrei in die Cloud repliziert. Trotzdem kommt es bei Exchange Online nicht korrekt an. Wenn in der Cloud beim "Mailuser" als Zieladresse die "@tenantname.mail.onmicrosoft.com" steht, dann ist es quasi ein Zirkelbezug. Exchange Online weis sicher nicht, wie er diese Mail nun nach "On-Premises" zu stellen soll. Der HCW hat zwar einen "Outbound Connector" angelegt, der aber nur die Firmendomain als Routing-Ziel hat:

PS C:\> Get-OutboundConnector "Outbound to <guid>" | fl

Enabled               : True
UseMXRecord           : False
ConnectorType         : On-Premises
ConnectorSource       : HybridWizard
RecipientDomains      : {msxfaq.de}
SmartHosts            : {hybrid.msxfaq.de}
TlsDomain             : *.msxfaq.de
TlsSettings           : DomainValidation
IsTransportRuleScoped : False
RouteAllMessagesViaOn-Premises : False
CloudServicesMailEnabled      : True
AllAcceptedDomains    : True
TestMode              : False
LinkForModifiedConnector      : 00000000-0000-0000-0000-000000000000
Identity              : Outbound to <guid>

Das Feld "RecipientDomains" beschreibt hier nur die Domains, die beim HCW während der Einrichtung eingetragen wurden. Sicher hätte man hier nun auch noch <tenant>.mail.onmicrosoft.com eintragen können, was aber dann eventuell zu Loops geführt hätte.

Irgendwann ist dann aber etwas anderes aufgefallen. Bei den RemoteDomains war die die Exchange Online Routing Domain eintragen:

# Exchange Online PowerShell
PS C:\> Get-RemoteDomain | ft name,domainname,TargetDeliveryDomain

Name                                          DomainName                             TargetDeliveryDomain
----                                          ----------                             --------------------
Default                                       *                                      False
msxfaq.de                                     msxfaq.de                              False
Hybrid - Domain msxfaq.onmicrosoft.com        Domain msxfaq.onmicrosoft.com          False
Hybrid - Domain msxfaq.mail.onmicrosoft.com   Domain msxfaq.mail.onmicrosoft.com     True

Zum einen irritierte mich, dass die beiden "onmicrosoft.com"-Domains hier auftauchen. Bei anderen Kunden und Tenants sind die Domains in Exchange Online nicht vorhanden. Die "mail.onmicrosoft.com"-Domain hatte zusätzlich noch das Flag "TargetDeliveryDomain=$true gesetzt. Über dieses Feld komme ich dann weiter auf:

The TargetDeliveryDomain parameter specifies whether the remote domain is used in cross-forest deployments to generate target email addresses for new mail users that represent users in the other organization (for example, all mailboxes hosted on Exchange Online are represented as mail users in your On-Premises organization). Valid values are:
$true: The remote domain is used for the target email address of mail users that represent the users in the other forest.
$false: The remote domain isn't used for the target email address of mail users that represent the users in the other forest. This is the default value.
Quelle: Set-RemoteDomain https://docs.microsoft.com/en-us/powershell/module/exchange/set-remotedomain?view=exchange-ps

OCT als Ursache?

Es könnte darauf hinauslaufen, dass der "Organization Configuration Transfer" hier einen Fehler macht. Auf dem lokalen Exchange Server ist die Microsoft Domain nämlich eingetragen.

# Exchange 2016 PowerShell
[PS] C:\>Get-RemoteDomain | ft domainname,targ* -AutoSize

DomainName                     TargetDeliveryDomain
----------                     --------------------
*                                             False
msxfaq.mail.onmicrosoft.com                   True
msxfaq.onmicrosoft.com                        False

Ich habe den Verdacht, dass bestimmte Versionen von OCT oder gewisse Umstände dazu führen, dass OCT die lokal gepflegten "Remote Domains" auch in die Cloud überträgt. Wer danach sucht, finden auch Hinweise wie.

‎Jeroen Dronkers, Microsoft 01-20-2020 07:36 AM
"OCT also includes remote domains although it syncs them with incorrect settings"
Quelle Released: Hybrid Organization Configuration Transfer V2 https://techcommunity.microsoft.com/t5/exchange-team-blog/released-hybrid-organization-configuration-transfer-v2/ba-p/608762

Allerdings habe ich noch keine Quellen gefunden, warum sich dann Exchange Online hier so seltsam verhält und die ExternalEmailAddresse des Cloud-Objektes für ein lokales Postfach so falsch setzt.

Anscheinend nutzt Exchange Online die mit dem Kennzeichen "TargetDeliveryDomain=$true" versehene Domain zur Festlegung des Feldes ExternalEmailAddress

Damit geht natürlich ganz viel schief. Das betrifft nicht nur das Mailrouting, d.h. die On-Premises Mailbox ist aus der Cloud nicht erreichbar. Auch Free/Busy-Zeiten, Teams Kalenderzugriff und Autodiscover sind für den Client gestört.

Lösung - HCW Sep 2020

Das ist ein interessantes und hier natürlich fehlerhaftes Verhalten. Ursache war der Hybrid Configuration Wizard. In der Version vom Sep 2020 wurde das fehlerhafte Verhalten korrigiert.

HCW incorrectly sets the externalEmailAddress parameter during OCT (Object Configuration Transfer). OCT is used to break mailflow.

Quelle: September 2020 update to Exchange Hybrid Configuration Wizard
https://support.microsoft.com/en-us/help/4583653/september-2020-update-to-exchange-hybrid-configuration-wizard

Wann der Fehler genau eingeführt wurde, konnte ich nicht ermitteln. Sie können ja mal ihre "HCW-Logs" nach dem Befehl "Add-RemoteDomain" durchsuchen. Die Domains bei der fehlerhaften Umgebung wurden am 20. Aug 2020 angelegt.

Ein HCW-Lauf mit der aktuelle Version legt die Einträge nicht mehr an und entfernt auch die früher irrtümlich angelegten Einträge. Dann dauert es nur noch etwas, bis die Exchange Eigenschaften der MailUser in der Cloud endlich die richtige TargetAddress haben.

Weitere Links