如何将邮箱从一个 Office 365 租户迁移到另一个租户

本文介绍如何在业务合并方案中将邮箱和服务设置从一个 Office 365 租户迁移到另一个 Office 365 租户。如果有超过 500 位用户要迁移或者有大量 SharePoint 数据要迁移,最好使用 Office 365 合作伙伴

本文中的方案基于两个虚构公司 Contoso.com 和 Fabrikam.com,它们分别使用两个独立的 Office 365 租户。Contoso 已收购 Fabrikam,并打算将 Fabrikam 用户和数据迁移到 contoso.com Office 365 租户。

租户 1(目标)

租户 2(源)

自定义电子邮件域:   

contoso.com

fabrikam.com

Office 365 初始域:   

contoso.onmicrosoft.com

fabrikam.onmicrosoft.com

方案:使用第三方迁移工具迁移

此方案假设将在 Office 365 中手动创建 Fabrikam 公司的用户、组和其他对象,通过脚本将这些对象导入门户,或者通过 Active Directory 域服务 (AD DS) 合并将这些对象合并到 Contoso Active Directory 中。

完成后,所有 Fabrikam 帐户都将存在于 Contoso.com Office 365 租户中,并且都将使用 @fabrikam.com 作为 UPN。为确保简单和简洁,选择了这种最终寻址方案,当然,你也可以根据需要进行修改。

邮箱数据如何从一个 Office 365 租户移动到另一个租户

规划:迁移前两周

如果使用第三方迁移工具来迁移用户,请购买所需许可证进行迁移。

客户端注意事项   

对于 Outlook 2010 和 Outlook 2013,只需删除 Outlook 用户配置文件即可。

对于 Outlook 2007 和 Outlook 2010 中,重启时,自动发现会配置客户端并重新生成 .OST 文件。

对于 Lync 客户端,需要在迁移完成后立即添加联系人。

租户准备和许可   

源租户是 Fabrikam Office 365 租户,你将从中迁移用户和数据。目标租户是 Contoso Office 365 租户,你将迁移到该租户。

  1. 在目标 Office 365 租户中增加许可证,以适应将从源租户中迁移的所有邮箱。

  2. 在源租户和目标租户中创建管理员帐户,以便在从一个 Office 365 迁移到另一个 Office 365 时使用。某些迁移工具可能要求源租户具有多个管理员帐户,以优化数据吞吐量。

目标租户中的会议室、资源、通讯组和用户对象创建   

在目标 (Contoso) 租户中创建资源:

  1. 若要使用 Azure AD Connect 工具同步 Contoso Active Directory 域服务 (AD DS) 的所有对象,则必须通过合并在目标 (Contoso) 租户中创建源 (Fabrikam) 租户 AD DS 中的对象。

    1. 可使用各种 AD DS 工具完成 AD DS 合并。根据要迁移的对象多少,可能需要花额外的时间来规划合并,以便在迁移项目之前完成。

    2. 验证所有新用户和组均已通过目录同步同步到 Contoso.com 目标租户。在新租户中,这些对象应显示为 user@contoso.onmicrosoft.com,因为此时尚未迁移 Fabrikam 域。完成域迁移后,可将用户和组的主要电子邮件地址更新为 @fabrikam.com。

  2. 如果不使用目录同步,或者如果所有会议室、资源、组或用户都在源租户的 Office 365 管理中心内部进行管理,则必须在目标租户中创建这些对象。可在 Office 365 管理中心内手动创建对象,如果对象数目较大,则可使用 Office 365 管理中心的批量添加功能或使用 Windows PowerShell 导入 CSV 文件。

最终用户告知   

向组织内部的最终用户告知迁移:

  1. 创建告知计划,并开始通知用户即将进行的迁移和服务更改。

  2. 迁移后,必须清除所有 Outlook 客户端上的昵称缓存。请参阅如何在 Outlook 中重新设置昵称并自动完成缓存,了解最终用户可以运行的自动修复工具。

  3. 让用户知道,如果在迁移后遇到问题,如何使用新的登录信息连接到 Outlook Web App。

准备和迁移前活动:迁移前三天

域准备   

要准备域进行迁移,请完成以下步骤。

  1. 在目标 (Contoso) 租户上开始 Fabrikam.com 电子邮件域的域验证过程。

  2. 在 contoso.com Office 365 管理中心内,添加 Fabrikam.com 域,并在域名系统 (DNS) 中为验证创建 TXT 记录。

    注意: 该验证将失败,因为另一个租户仍在使用该域。

    立即执行此步骤将允许传播 DNS 记录时间,因为它可能需要长达 72 小时。最终验证将在后面的过程中进行。

迁移计划制定   

制定迁移计划:

  1. 创建要迁移的用户邮箱的主列表。

  2. 为使用的第三方迁移工具创建邮箱映射 .CSV 文件。迁移时,迁移工具会使用此映射文件来匹配源租户邮箱和目标租户邮箱。建议使用 *.onmicrosoft.com“初始”域来映射源帐户,因为自定义电子邮件域会不断变化

用于将邮箱数据从一个 Office 365 租户迁移到另一个租户的 CSV 文件

邮件交换器记录 (MX 记录)生存时间 (TTL) 测试   

接下来,将制定 TTL 测试计划。

  1. 在 DNS 中,将要迁移的主要电子邮件域的 MX 记录的 TTL 值更改为较小的数字(如,5 分钟)。如果 TTL 不能低于 5 分钟,请记下最小值。例如,如果最小值为 4 小时,则需要在迁移开始前 4 小时更改 MX 记录。

  2. MX 查阅验证 MX 和 DNS 更改。

在源租户中禁用目录同步   

在源租户 Office 365 管理中心内,禁用目录同步。此过程可能需要 24 小时或以上,因此必须在迁移前完成。一旦在门户中禁用,源租户 AD DS 中的任何更改将不再同步到 Office 365 租户。相应地调整现有用户和组预配过程。

迁移:迁移当天

以下是迁移当天需要执行的步骤。

MX 记录更改 – 停止入站邮件流   

将主要 MX 记录从 Office 365 更改为不可访问的域,如“unreachable.example.com”。尝试传送新邮件的 Internet 邮件服务器会对邮件进行列队,并在 24 小时内尝试重新传送。使用此方法,某些电子邮件可能会返回未送达报告 (NDR),具体取决于尝试传送电子邮件的服务器。如果这为你带来困扰,请使用 MX 记录备份服务。有许多第三方服务可以对数天或数周的电子邮件进行列队。迁移完成后,这些服务会将列队的邮件传送到新的 Office 365 租户。

提示: 如果 TTL 较短(例如,5 分钟),则可以在工作日结束时执行此步骤,以减少中断。如果 TTL 较长,则必须在距离 TTL 到期的时间之前更改 MX 记录。例如,如果计划在晚上 6 点开始迁移,则必须在下午 2 点前更改值为 4 小时的 TTL。

根据需要验证 MX 和 DNS 更改。可使用 Nslookup 或 MxToolbox 之类的服务来验证 MX 和 DNS 更改。

源租户准备   

必须删除源租户中所有对象的主要电子邮件域 fabrikam.com,然后才能将该域迁移到目标租户。

  1. 如果还使用 SharePoint Online 公共网站中设置了域,则必须先将该网站的 URL 设置回初始域,然后才能删除该域。

  2. 使用 Lync 管理门户删除源租户中用户的所有 Lync 许可证。这将删除连接到 Fabrikam.com 的 Lync Sip 地址。

  3. 将 Office 365 源邮箱中的默认电子邮件地址重置为初始域 (fabrikam.onmicrosoft.com)。

  4. 将所有通讯组列表、会议室和资源中的默认电子邮件地址重置为源租户中的初始域 (fabrikam.onmicrosoft.com)。

  5. 删除仍在使用 @fabrikam.com 的用户对象的所有辅助电子邮件(代理地址)。

  6. 将源租户中的默认域设置为 fabrikam.onmicrosoft.com 路由域(在管理门户中,单击右上角的公司名称)。

  7. 使用 Windows PowerShell 命令 Get-MsolUser -DomainName Fabrikam.com 检索仍在使用该域并阻止删除的所有对象的列表。

  8. 有关常见域删除问题,请参阅 You get an error message when you try to remove a domain from Office 365(尝试从 Office 365 中删除域时收到错误消息)。

目标租户准备   

在 contoso.com 租户中完成 Fabrikam.com 域的验证。从旧租户中删除域后,可能需要等待一小时。

  1. 配置自动发现 CNAME(内部/外部)(可选)。

  2. 如果使用 AD FS,请在目标租户中为 AD FS 配置新域。

  3. 开始在 contoso.com 租户中激活邮箱,然后向所有用户帐户分配许可证。

  4. 将 Fabrikam.com 电子邮件域设置为新用户的主要地址。可通过在门户中选择/编辑多个未授权用户或使用 Windows PowerShell 完成此操作。

  5. 如果未使用密码同步功能或 AD FS,请为目标 (Contoso) 租户中的所有邮箱设置密码。如果使用非常见密码,请通知用户新密码。

  6. 授权并激活邮箱后,转换邮件路由。将 Fabrikam MX 记录指向 Office 365 目标 (Contoso) 租户。MX TTL 到期时,邮件将开始流入新的空邮箱。如果使用 MX 备份服务,可将电子邮件释放到新的邮箱。

  7. 对传入/传出目标租户新邮箱的邮件流执行验证测试。

  8. 如果使用 Exchange Online Protection (EOP):在目标租户中,根据源租户重新创建传输规则、连接器、白名单/黑名单等。

开始迁移   

要最小化故障时间以及最大程度减少对用户带来的不便,请确定最佳迁移方法。

  • 500 位或以下用户的迁移:将邮件日历和联系人数据迁移到目标租户邮箱。如果可能,按日期限制邮件迁移,例如,最近 6 个月的数据。

  • 超过 500 位用户的迁移:使用多遍方法迁移所有用户的联系人、日历和仅 1 周的电子邮件,然后在接下来的几天或几周,用较旧的电子邮件数据多遍填充邮箱。

通过第三方迁移工具开始邮件迁移。

  1. 使用供应商提供的工具监视迁移进度。迁移过程中,定期向管理和迁移团队发送进度报告。

  2. 完成所有迁移后,执行第二遍和第三遍迁移(可选)。

迁移结束时,Outlook 2007 和 Outlook 2010 会同步每个用户的整个邮箱,这会占用大量带宽,具体取决于要迁移到每个邮箱中的数据多少。Outlook 2013 默认仅缓存 12 个月的数据。此设置可配置为更多或更少的数据(例如,仅 3 个月的数据),以减少带宽使用。

迁移后:清除   

答复迁移的电子邮件时,用户可能会收到 NDR。需要清除 Outlook 昵称缓存。请参阅如何在 Outlook 中重新设置昵称并自动完成缓存。也可以添加旧的 DN 作为所有用户的 x.500 代理地址。

Windows PowerShell 脚本示例

使用以下 Windows PowerShell 脚本示例开始创建自己的脚本。

Office 365 批量密码重置

  1. 创建名为 password.csv 的 CSV 文件。

  2. 在此文件中插入“upn”和“newpassword”列(例如:johnsmith@contoso.com,Password1)

  3. 使用 Windows PowerShell 命令:

    Import-Csv password.csv|%{Set-MsolUserPassword –userPrincipalName $_.upn -NewPassword $_.newpassword -ForceChangePassword $false}

将具有特定代理地址的所有 Office 365 帐户复制到 CSV 文件中

##########################################################################
# Script: showproxies.ps1
# Copies all accounts in Office 365 that contain/don't contain a specific
# proxyaddress to a .CSV file (addresses.csv)
#
# Change the following variable to the proxy address string you want to find:
# $proxyaddr = "onmicrosoft.com"
################################################################################
$proxyaddr = "onmicrosoft.com"
# Create an object to hold the results
$addresses = @()
# Get every mailbox in the Exchange Organisation
$Mailboxes = Get-Mailbox -ResultSize Unlimited
# Loop through the mailboxes
ForEach ($mbx in $Mailboxes) {
# Loop through every address assigned to the mailbox
Foreach ($address in $mbx.EmailAddresses) {
# If it contains XXX, Record it
if ($address.ToString().ToLower().contains("onmicrosoft.com")) {
# This is an email address. Add it to the list
$obj = "" | Select-Object Alias,EmailAddress
$obj.Alias = $mbx.Alias
$obj.EmailAddress = $address.ToString() #.SubString(10)
$addresses += $obj
}
}
}
# Export the final object to a csv in the working directory
$addresses | Export-Csv addresses.csv -NoTypeInformation
# Open the csv with the default handler
Invoke-Item addresses.csv
##### END OF SHOWPROXIES.PS1

在 Office 365 中批量创建会议室邮箱

################################################################################
# Script: create-rooms.ps1
# Description:*** RUN THIS SCRIPT FROM A WINDOWS POWERSHELL SESSION ***
#This script creates Room mailboxes in Office 365.
# Syntax:Create-Rooms.ps1 -inputfile "file name.csv"
#
# Dependencies: Input file should contain 3 columns: RoomName, RoomSMTPAddress, RoomCapacity
#
################################################################################
param( $inputFile )
Function Usage
{
$strScriptFileName = ($MyInvocation.ScriptName).substring(($MyInvocation.ScriptName).lastindexofany("\") + 1).ToString()
@"
NAME:
$strScriptFileName
EXAMPLE:
C:\PS> .\$strScriptFileName -inputfile `"file name.csv`"
"@
}
If (-not $inputFile) {Usage;Exit}
#Get MSO creds and initialize session
If ($cred -eq $NULL) {$Global:cred = Get-Credential}
#
If ($ExchRemoteCmdlets.AccessMode -ne "ReadWrite")
{
Write-Host
Write-Host Connecting to Office 365...
Write-Host
$NewSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic -AllowRedirection
$Global:ExchRemoteCmdlets = Import-PSSession $NewSession
}
#Import the CSV file
$csv = Import-CSV $inputfile
#Create Rooms contained in the CSV file
$csv | foreach-object{
New-mailbox -Name $_.RoomName -room -primarysmtpaddress $_.RoomSMTPAddress -resourcecapacity $_.RoomCapacity
}
##### END OF CREATE-ROOMS.PS1

从邮箱中批量删除辅助电子邮件地址

##########################################################################
# Script: remove-proxy.ps1
#Description:*** RUN THIS SCRIPT FROM A WINDOWS POWERSHELL SESSION ***
#This script will remove a secondary email address from many users
#
# Syntax:remove-proxy.ps1 -inputfile "filename.csv"
#
# Dependencies:Input file should contain 2 columns: Username, Emailsuffix
# Example: Username=tim, Emailsuffix=fabrikam.com
#Script will remove the address tim@fabrikam.com from the mailbox for Tim.
#NOTE: Address must be secondary; it will not remove primary email address.
#
################################################################################
param( $inputFile )
Function Usage
{
$strScriptFileName = ($MyInvocation.ScriptName).substring(($MyInvocation.ScriptName).lastindexofany
("\") + 1).ToString()
@"
NAME:
$strScriptFileName
EXAMPLE:
C:\PS> .\$strScriptFileName -inputfile `"file name.csv`"
"@
}
If (-not $inputFile) {Usage;Exit}
#Get MSO creds and initialize session
If ($cred -eq $NULL) {$Global:cred = Get-Credential}
#
If ($ExchRemoteCmdlets.AccessMode -ne "ReadWrite")
{
Write-Host
Write-Host Connecting to Office 365...
Write-Host
$NewSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri
https://ps.outlook.com/powershell -Credential $cred -Authentication Basic -AllowRedirection
$Global:ExchRemoteCmdlets = Import-PSSession $NewSession
}
#Import the CSV file and change primary smtp address
$csv = Import-CSV $inputfile
$csv | foreach-object{
# Set variable for email address to remove
$removeaddr = $_.username + "@" + $_.emailsuffix
Write-Host ("Processing User: " + $_.UserName +" - Removing " + $removeaddr)
Set-Mailbox $_.Username -EmailAddresses @{Remove=$removeaddr}
}
##### END OF REMOVE-PROXY.PS1
扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×