今天同事找我帮忙看看为啥有个用户的邮件无法同步到Office365上。他的需求是用户A离开了公司,为了继续接收邮件,他已经在A上面删除了旧的邮箱信息,,然后把A的邮件作为一个新的smtp地址放在了B用户上,但是B的这个新地址就是无法同步上Office365。


豆子花了不少时间来拍错,最后发现其实根本的原因在于用户A在删除Proxyaddress和Mail之前已经disable了,然后在A上面的任何改动都不会同步到Office365,因此Office365上面会自动切断这个用户的登录,但是mailbox仍然保持着之前的所有记录!这样一来,因为旧的邮箱依然关联着A的邮件地址,B用户自然无法添加这个地址进去。


下面豆子事后诸葛亮,总结一下Office365 email信息不同步时候的排错顺序。


  1. 首先查看要同步的email的Office365的邮箱是否已经存在,这个可以手动的登录Office365 Exchange Admin web界面查询

    Office365 用户同步排错思路

    或者直接使用powershell 命令


比如下面命令是连接Office365,查询对应邮件的邮箱

$UserCredential = Get-Credential 
Connect-MsolService -Credential $UserCredential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session
get-mailbox -filter {Emailaddresses -like "*[email protected]*"} | select -expand emailaddresses



2. 如果邮箱不存在已有的记录,下一步需要查询AD上面是否已经创建了相关的记录。AD上在不同的对象上创建重复的邮件记录并不会报错,但是当同步到Office365的时候,任何重复冲突的对象都不会同步。这里豆子一般是检查 proxyaddresses和EMailaddress这两个属性。类似的,可以去通过图形工具ADSIEdit.msc, ADUC或者Exchange admin Console查看,不过最简单的还是通过Powershell命令


例:ADSIEdit截图

Office365 用户同步排错思路


Powershell命令

#查询email,这个可以在ADUC用户的email界面下修改
get-aduser-Filter {Emailaddress -like "[email protected]"}
 
#查询proxyaddress,这个可以在ADSIEdit或者Exchange的管理界面里面才能修改
get-aduser -Filter {proxyaddresses -like "*[email protected]*"}


3. 还有一个常见的工具叫做IdFix,可以通过Office365的管理界面下载。


Office365 用户同步排错思路


注意设置里面限制Search Base,不然默认整个森林会比较慢

Office365 用户同步排错思路


查询结果如下 我可以很清楚的知道哪些地方同步有问题

Office365 用户同步排错思路



4. 最后在Azure 的同步服务器上我们可以查看Sychronization Service Manager。这个地方可以看见同步的进度和哪些东西进行了同步。有的时候delta sync不工作的话,可以考虑full sync,当然后者的时间可能是几个小时了。


Office365 用户同步排错思路


如果想知道为啥哪些东西同步了,有些没有同步,还可以查看Synchronization Rules Editor。

比如说下面划红线的规则就是disable的用户不同步,也就是造成豆子今早困扰的原因所在。

Office365 用户同步排错思路