这是一个已知问题,描述是POP3客户端用户在还没有打开邮件时就会将已读回执发出,阅读后又会发送一份已读回执,简称重复回执(Duplicate Receipt)。
微软官方声称这个问题只存在于Exchange2007 SP3 RU3之前的版本,但就我发现的情况,Exchange2010和2013都有同样的问题,我相信2016也是如此。不是说Exchange产品组不作为,迟迟不修复这个‘Bug’,而是这是POP3协议自身的问题。
试想,服务器上的一封邮件是要求已读回执的,然而这封邮件被取走了而服务器不知道客户端上这封邮件“拆了还是没拆”,他应该做出怎样的判断?很简单,邮件一定是因为要被读取而被取走的。于是收件方就会收到如下的已读回执: Your message To: Johnnie Subject: test - POP3 Sent: Wednesday, August 30, 2017 3:46:51 PM was read on Wednesday, August 30, 2017 3:47:03 PM
然后当你确实在POP3终端上查看了邮件,邮件的Unread标示位(Flag)在由1变0时会触发已读回执发送给发件人。相当于在邮件的某个属性上嵌套了一个宏,于是发件人就又收到了一封回执: Your message To: johnnie@xxx.com Subject: test - POP3 Sent: 8/30/2017 3:46 PM was read on 8/30/2017 3:47 PM.
Exchange 2010之后EMS命令Set-PopSettings命令多了一个等待回执的参数(-Suppre***eadReceipt),意思是服务器先不默认取走状态是已读状态,而是等收件人回执发到了服务端再看。然而等不来的回执,服务器默默发了以下第二封回执: Your message To: Johnnie Subject: test - POP3 Sent: 8/30/2017 3:47 PM. (UTC+08:00) was deleted without being read on 8/30/2017 3:47 PM. (UTC+08:00)
嗯。。。不算太坏吧,至少我们找到了特征字段,下面只要定义传输规则丢弃含这个字段的邮件就可以防止POP的重复回执了。