在 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
建议阅读:如何设置 SMTP 匿名中继电子邮件
Get-Recipient -ResultSize Unlimited -RecipientType your_object_type | …
Exchange 对象的可能类型:
- 动态分发组
- 邮件联系
- 邮件非通用集团
- 邮件环球分发集团
- 邮件通用安全集团
- 邮件用户
- 公共文件夹
- 用户邮箱
如果您需要查找具有相同(重复)收件人 SMTP 地址的 Exchange 对象,请运行:
Get-Recipient -resultsize unlimited | where {$_.EmailAddresses -like "*[email protected]*"}
您还可以获取 Exchange 中 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
