在 Exchange 中使用 PowerShell 獲取所有 SMTP(電子郵件)地址
有時,您可能需要導出 Exchange 組織中的電子郵件地址的完整列表。在本文中,我們將展示如何使用 PowerShell 獲取所有分配的 SMTP 地址並將其導出到 Exchange Server 或 Microsoft 365 (Exchange Online) 中的 CSV 文件。
連接到您的 Exchange 組織:
- 您可以使用 Exchange Management Shell (EMS) 模塊來管理本地 Exchange Server,也可以從常規 PowerShell 控制台遠程連接到 Exchange;
- 使用 Exchange Online PowerShell 模塊 (EXO) 連接 Microsoft 365 租戶。您可以使用基於證書的身份驗證從 PowerShell 中登錄 Exchange Online。
要查看特定 Exchange 郵箱的所有主 SMTP 地址和附加 SMTP 地址,請運行以下命令:
Get-Mailbox testmax |Select-Object DisplayName,PrimarySmtpAddress,EmailAddresses|fl

- 這
SMTP大寫的地址包含主要電子郵件地址 - 小寫的
smtp值是輔助(別名)電子郵件地址。
proxyAddresses 屬性用於設置本地 Active Directory 中的電子郵件傳送地址。
如您所見,為用戶分配了多個附加 SMTP 地址,這些地址存儲在 EmailAddresses 字符串屬性中。此屬性中可能還有其他類型的地址,因此要獲取郵箱的所有 SMTP 地址的列表,請運行以下命令:
Get-Mailbox testmax | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}
以下命令顯示 Exchange 中所有用戶郵箱和共享郵箱的所有主地址和別名,並將結果導出到 CSV 文件:
Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }} | Export-Csv "C:PSList-All-SMTP-Addresses.csv" -NoTypeInformation -Encoding UTF8
這獲取郵箱cmdlet 僅顯示有關用戶和共享郵箱的信息。
在 Active Directory(或 Azure AD)中,可能存在分配了 SMTP 地址的其他類型的對象(啟用郵件的對象):通訊組、聯繫人和 Microsoft 365 組(Entra ID 中的統一組)。使用獲取收件人用於列出 Exchange 組織/租戶中所有對象的 SMTP 地址的 cmdlet:
Get-Recipient -ResultSize Unlimited | Select-Object DisplayName, RecipientType, PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}


在本例中,我們有所有類型的 Exchange 對象的 SMTP 地址的列表。要僅導出特定對像類型的 SMTP 地址,請將以下參數添加到第一個 cmdlet
Get-Recipient -ResultSize Unlimited -RecipientType your_object_type | …
Exchange 對象的可能類型:
- 動態分發組
- 郵件聯繫
- 郵件非通用集團
- 郵件環球分發集團
- 郵件通用安全集團
- 郵件用戶
- 公共文件夾
- 用戶郵箱
如果您需要查找具有相同(重複)收件人 SMTP 地址的 Exchange 對象,請運行:
Get-Recipient -resultsize unlimited | where {$_.EmailAddresses -like "*[email protected]*"}
您還可以獲取 Exchange 中 SMTP 地址的簡單列表:
更多閱讀:如何設置 SMTP 匿名中繼電子郵件
Get-Recipient | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_.Replace("smtp:", "").Replace("SMTP:", "") }


還為 Microsoft Teams 渠道生成了唯一的 SMTP 地址。
查看 Exchange 組織中唯一 SMTP 地址的數量:
Get-Recipient -ResultSize Unlimited | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" }| measure-object
