昨天論壇上有個用戶說他用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服務器;郵件管理員能夠控制你的終端設備權限並能看到郵件收發狀態;一樣會有同步問題。