Exchange

如何從所有 Exchange 郵箱中刪除輔助域的 SMTP 地址?

  • July 11, 2019

我有一個用於管理多個 SMTP 域的 Exchange 伺服器;現在它只需要管理一個。

我已經從所有地址策略中刪除了輔助域;我需要刪除所有引用它的 SMTP 地址。

所有使用者都將其主 SMTP 地址設置為使用主域;但幾乎​​所有人都有另一個使用輔助域的地址。它們還有許多其他不同的地址:用於 lync 的 SIP,以及從以前的遷移中派生的一個或多個 X500。這些根本不應該被觸及。

如何在不影響其他任何內容的情況下刪除所有這些輔助 SMTP 地址?

這是比我原來的答案更好的版本(它為每個郵箱處理多個要刪除的地址,並且還提供更多輸出):

$domain = 'somedomain.com'

$mbxs = Get-Mailbox -ResultSize Unlimited

foreach($m in $mbxs)
{
   Write-Host 'Mailbox:' $m.SAMAccountName
   $addrs = $m.EmailAddresses
   for($i = 0;$i -lt $addrs.Count;$i++)
   {
       $addr = $addrs[$i]
       if($addr.PrefixString -eq 'smtp'-and $addr.SmtpAddress -like '*@' + $domain)
       {
           Write-Host 'Removing address:' $addr.SmtpAddress
           $m.EmailAddresses.RemoveAt($i)
           $i--
       }
   }
   if($addrs.Changed)
   {
       Write-Host 'Saving mailbox:' $m.SAMAccountName
       Set-Mailbox $m -EmailAddresses $addrs
   }
   else
   {
       Write-Host 'No address to remove'
   }
}

請在實驗室和/或一小部分測試使用者上進行測試,然後再使用它進行生產。

$SMTPDomainToRemove = "@OldDomain.com"
$AllUsers = Get-ADUser -Filter * -Properties proxyAddresses
Foreach($usr In $AllUsers)
{
   $NewAddressList = @()
   $OldAddressList = $usr.proxyAddresses
   Foreach($addr In $OldAddressList)
   {
       If(!($addr -Match $SMTPDomainToRemove))
       {
           $NewAddressList += $addr
       }
   }
   If($NewAddressList.Count -GT 0)
   {
       Set-ADUser $usr -Replace @{ 'proxyAddresses' = $NewAddressList}
   }
}

我們的想法是,我們正在獲取每個使用者的 proxyAddresses 地址列表,刪除其中包含舊域名的地址列表,然後用新的、更新的、不包含對舊域的引用的地址列表替換地址列表姓名。

http://blogs.technet.com/b/exchange/archive/2005/01/10/350132.aspx

電子郵件地址屬性

Exchange 在以下屬性中儲存和使用有關收件人電子郵件地址的資訊:proxyAddresses

這是保存電子郵件地址資訊的主要屬性。當您在 Outlook 中打開收件人的屬性並查看“電子郵件地址”選項卡時,您正在查看此屬性。這是一個多值字元串,包含代表收件人的所有地址。每個值必須具有以下格式:type:address

例如:SMTP:nospam@online.microsoft.com

當類型為大寫字母時,該地址被認為是該類型的主地址,並用作該收件人的預設回复地址。當類型為小寫字母時,該地址被視為輔助地址,用於在電子郵件傳遞過程中解析地址,允許同一收件人接收定向到不同電子郵件地址的電子郵件。

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