Ich hatte das Problem schon mal in einem anderen Artikel beschrieben: Benutzer erhalten einen Unzustellbarkeitsbericht (NDR) beim Versuch an Postfächer oder Verteiler zu senden. Der Felercode im NDR lautet “550 5.1.1 RESOLVER.ADR.ExRecipNotFound; not found‘. Hier ein Beispiel für solch einen NDR:
Das Problem tritt zum Beispiel auf, wenn eine Verteilerliste in eine Shared Mailbox migriert wurde. Die E-Mail Adresse bleibt zwar gleich, aber es ändert sich der “LegacyExchangeDN”. Dieses Attribut benutzt Outlook nach wie vor für die Autovervollständigung. Hat ein Benutzer schon einmal Mails an einen Verteiler geschickt und daher den Eintrag in seiner Autovervollständigung gespeichert, kommt es nach der Änderung (in diesem Fall Verteilerliste zu Shared Mailbox) zu dem oben dargestellten NDR.
Wenn es nur wenige Benutzer betrifft, dann kann der alte Eintrag einfach gelöscht werden:
Wenn es allerdings viele Benutzer betrifft, ist dies wahrscheinlich keine Option mehr. Wie im oben verlinkten Artikel beschrieben, kann der LegacyExchangeDN als X500 Eintrag an die neue Verteilerliste oder Mailbox zugewiesen werden um das Problem zu umgehen.
Wenn man aber den alten LegacyExchangeDN nicht mehr hat, dann kann auch der IMCEAEX String aus dem NDR in einen X500 Eintrag konvertiert und zugewiesen werden.
Diese kleine PowerShell Funktion konvertiert die IMCEAEX String in X500 Strings:
function ConvertTo-X500{ Param( [parameter(Mandatory=$true)] [String] $IMCEAEX ) $IMCEAEX = $IMCEAEX.replace("_","/") $IMCEAEX = $IMCEAEX.replace("+20"," ") $IMCEAEX = $IMCEAEX.replace("+28","(") $IMCEAEX = $IMCEAEX.replace("+29",")") $IMCEAEX = $IMCEAEX.replace("+40","@") $IMCEAEX = $IMCEAEX.replace("+2E",".") $IMCEAEX = $IMCEAEX.replace("+2C",",") $IMCEAEX = $IMCEAEX.replace("+5F","_") $IMCEAEX = $IMCEAEX.replace("IMCEAEX-","X500:") $IMCEAEX = $IMCEAEX.split("@")[0] return $IMCEAEX }
Die Funktion kann nun in Scripten oder direkt in der PowerShell verwendet werden:
In diesem kleinen Beispiel wird ein IMCEAEX String aus einem NDR in einen X500 Eintrag konvertiert und danach der Mailbox zugewiesen:
$MailboxAlias = "frank" $IMCEAEXString = "IMCEAEX-_O=Frankys+20Web_OU=EXCHANGE+20ADMINISTRATIVE+20GROUP+20+28FYDIBOHF23SPDLT+29_CN=RECIPIENTS_CN=Zoechling+20SFrankd9c@frankysweb.local" function ConvertTo-X500{ Param( [parameter(Mandatory=$true)] [String] $IMCEAEX ) $IMCEAEX = $IMCEAEX.replace("_","/") $IMCEAEX = $IMCEAEX.replace("+20"," ") $IMCEAEX = $IMCEAEX.replace("+28","(") $IMCEAEX = $IMCEAEX.replace("+29",")") $IMCEAEX = $IMCEAEX.replace("+40","@") $IMCEAEX = $IMCEAEX.replace("+2E",".") $IMCEAEX = $IMCEAEX.replace("+2C",",") $IMCEAEX = $IMCEAEX.replace("+5F","_") $IMCEAEX = $IMCEAEX.replace("IMCEAEX-","X500:") $IMCEAEX = $IMCEAEX.split("@")[0] return $IMCEAEX } $ProxyAddresses = (Get-Mailbox $MailboxAlias).EmailAddresses $x500 = ConvertTo-X500 -IMCEAEX $IMCEAEXString $x500 = [Microsoft.Exchange.Data.CustomProxyAddress]("$x500") $ProxyAddresses += $x500 Set-Mailbox $MailboxAlias -EmailAddresses $ProxyAddresses
Das Script lässt sich mit wenig Aufwand auch für Verteilerlisten anpassen.