此环境已从 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
这应该可以解决所有邮件联系人的问题!