昨天论坛上有个用户说他用POP3客户端收到一封要求回执的邮件,可是他尚未打开它,已读回执就已经发出去了。因而他来求助这是怎么回事。
web
这是一个已知问题,描述是POP3客户端用户在尚未打开邮件时就会将已读回执发出,阅读后又会发送一份已读回执,简称重复回执(Duplicate Receipt)。服务器
微软官方声称这个问题只存在于Exchange2007 SP3 RU3以前的版本,但就我发现的状况,Exchange2010和2013都有一样的问题,我相信2016也是如此。不是说Exchange产品组不做为,迟迟不修复这个‘Bug’,而是这是POP3协议自身的问题。
ide
试想,服务器上的一封邮件是要求已读回执的,然而这封邮件被取走了而服务器不知道客户端上这封邮件“拆了仍是没拆”,他应该作出怎样的判断?很简单,邮件必定是由于要被读取而被取走的。因而收件方就会收到以下的已读回执:
spa
Your message orm
To: Johnnie对象
Subject: test - POP3ip
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的重复回执了。
饶了一大圈,是时候来讲说三大邮件协议的工做原理:
POP3做为三者中最老的协议,它会将邮件数据下载到第一个链接客户本地,若是还有用户想要链接下载的话,服务端已经没有了。它的好处是应用普遍;坏处是没法同步消息;一旦下载服务端即消失(你能够设置在服务端保存副本,但这并不改变协议的本质);没法同步联系人、日历和子邮件目录。
与POP3的单向通信不一样,IMAP会来回地与邮件服务器通信。这就意味着当你将一封新邮件下载到台式机的Outlook里,它将一样被下载到你的iPhone;若是你在iPad上阅读了一封邮件,这封邮件在你笔记本上的状态也会变为“已读”;包括移到其余目录的邮件(即使不在收件夹下)也将被同步。这个协议的问题在于容错性比较差。若是你的邮件帐户同时有多个用户须要访问,IMAP可能并非一个理想的协议。即若是用户A下载了邮件,同一帐户的用户B将可能永远看不到了。它的好处是全邮件同步;可同步Flag和待办项目;易学易用。坏处是若是多用户使用同一帐号,邮件同步可能在不一样用户间形成困惑。
Exchange协议可供用户同步邮件、联系人、日历及其余全部Exchange对象。因为这个协议须要部署Exchange服务器,所以一般为公司或者机构帐号所用。它的好处是:全邮件同步;邮件保存在服务器上;支持绝大部分移动设备、联系人、日历和数据同步;在服务器域中邮件可撤回并修改。坏处是必须部署昂贵的Exchange服务器;邮件管理员能够控制你的终端设备权限并能看到邮件收发状态;一样会有同步问题。