Exchange 2010 邮件联系人根据收件人策略分配内部 SMTP 地址

Exchange 2010 邮件联系人根据收件人策略分配内部 SMTP 地址

此环境已从 Exchange 2007 升级到新的 Exchange 2010 服务器。Federation_Contacts OU 下有数千个电子邮件联系人。在每个邮件联系人的“电子邮件地址”选项卡下,其正确的 SMTP 地址([电子邮件保护]例如)被指定为主。但不知何故,每个人也都分配了我们公司的内部电子邮件地址([电子邮件保护][电子邮件保护]

现在的问题是,发送给这些联系人的电子邮件被退回,错误代码为 #550 5.1.1 RESOLVER.ADR.ExRecipNotFound;未找到

我们必须去删除错误创建的内部 SMTP 地址,并取消选中根据收件人策略设置自动更新地址。

我的问题是:1-我们如何批量删除这些邮件联系人的内部电子邮件地址,同时注意不影响我们的内部用户?

2-我们如何阻止 Exchange(更准确地说,收件人策略)为新邮件联系人创建这些内部地址?

答案1

我使用 Powershell 禁用从收件人策略更新电子邮件地址:

Get-MailContact -OrganizationalUnit "domain.local/OU" | set-mailcontact -emailaddresspolicyenabled $false

然后我使用 ADModify.net 删除分配给联系人的辅助 SMTP 地址。它非常有效。

答案2

遇到了同样的问题(有点晚了),所以我拿了你的“脚本”并更新了它。你需要禁用应用于 Exchange 中联系人的电子邮件地址策略,这将部分解决问题。

1) 展开 Microsoft Exchange On-Premises 2) 展开组织配置 3) 选择集线器传输并转到电子邮件地址策略选项卡 4) 编辑每一个,Users with external e-mail addresses不勾选复选框和Contacts with external e-mail addresses

在此处输入图片描述

它将部分解决问题,因为默认策略无法被禁用,所以我最终默认将 domain.local 电子邮件地址添加到新联系人中。

因此,我根据所讨论的脚本编写了一个脚本(所讨论的脚本存在一些错误,其中分配了来自同一域的多个地址并且产生了很大的噪音),该脚本将删除任何非外部的电子邮件地址,并且还将确保旧联系人不会重新应用策略。

####
# Input variables
####
$domains = @("*@domain.com","*@domain.pl","*@evotec.pl", "*@domain.local")
$ou = "evotec.local"

####
# Removing internal domains from contacts
####
$domains | foreach { 
$domain = $_;
write-host "Preparing for removal of addresses with domain name:" $domain 
$Contacts = Get-MailContact -OrganizationalUnit $ou -Filter {
                EmailAddresses -like $domain -and name -notlike "ExchangeUM*"
            } -ResultSize unlimited -IgnoreDefaultScope
$Contacts | foreach {       
    $contact = $_; 
    $email = $contact.emailaddresses; 
    #write-host "1. " $contact
    #write-host "2. " $contact.name
    #write-host "3. " $email
    #write-host "4. " $contact.identity 
    $email | foreach {
        if ($_.smtpaddress -like $domain) 
            {
                $address = $_.smtpaddress; 
                write-host "[*] Removing address" $address "from Contact" $contact.name; 
                Set-Mailcontact -Identity $contact.identity -EmailAddresses @{Remove=$address}; 

            }

    }
}
}
####
# Setting up email address policy to disabled for all contacts
####
write-host "Preparing all contacts for disabling email address policy"
$Contacts = Get-MailContact -OrganizationalUnit $ou -Filter {
                EmailAddresses -like $domain -and name -notlike "ExchangeUM*"
            } -ResultSize unlimited -IgnoreDefaultScope | Where {$_.EmailAddressPolicyEnabled  -eq $true}
$Contacts | foreach {
    $contact = $_; 
    write-host "[*] Setting up email address policy to disabled for" $contact.name
    $contact | set-mailcontact -emailaddresspolicyenabled $false
    }

最后一步是将其设置为任务计划程序,因为新联系人将继续获得不可编辑的(至少以受支持的方式)默认策略。Exchange 服务器上的此设置将运行良好。确保以正确的权限运行它。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command ". 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; C:\ExchangeScript\RemoveLGBSEmailsFromContacts.ps1"

答案3

首先尝试确定可能对这些地址进行采样的策略。您可以对其进行微调,使其仅适用于邮箱或联系人...

...或者仅为联系人创建一个新的。

如果您需要进行批量更改,powershell 可以帮您清理混乱局面。

答案4

获取邮件联系人 | 设置邮件联系人 -EmailAddressPolicyEnabled:$false

这应该可以解决所有邮件联系人的问题!

相关内容