Email

Exchange 2010 郵件聯繫人通過收件人策略獲得分配的內部 SMTP 地址

  • February 10, 2015

此環境已從 Exchange 2007 升級到新的 Exchange 2010 伺服器。Federation_Contacts OU 下有數千個電子郵件聯繫人。在每個郵件聯繫人的電子郵件地址選項卡下,其正確的 SMTP 地址(例如 john@othercompany.com)被指定為主要地址。但不知何故,每個人也被分配了我們公司的內部電子郵件地址(john@ourcompany.com 和 john@ourcompany.local

現在的問題是發給這些聯繫人的電子郵件會以#550 5.1.1 RESOLVER.ADR.ExRecipNotFound 退回;未找到

我們必須刪除錯誤創建的內部 SMTP 地址,並取消選中基於收件人策略設置的自動更新地址。

我的問題是:1-我們如何批量刪除這些郵件聯繫人的內部電子郵件地址,注意不要影響我們的內部使用者?

2-我們如何阻止 Exchange(更準確地說,我猜是收件人策略)為新郵件聯繫人創建這些內部地址?

我使用 Powershell 禁用從收件人策略更新電子郵件地址:

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

然後我使用 ADModify.net 剝離了分配給聯繫人的輔助 SMTP 地址。它就像一個魅力。

有同樣的問題(有點晚)所以我拿了你的“腳本”並更新了它。您需要禁用電子郵件地址策略以應用於 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"

引用自:https://serverfault.com/questions/446454