POP3 判別使用者與 Mail Server 的收信紀錄 , 避免重複收信 – UIDL

2015-05-07 Postfix

在 MUA 中要如何判別在 POP3 上面的信已經收下來到使用者的 MUA 內,避免讓使用者的 MUA (Outlook, Thunderbird) 重複收信

 

這個問題在一般狀況中不會去特別注意,但如果公司要更換 Mail Server 的話,問題就浮現了

若是 MUA 使用 POP3,並且在 MailServer 上保留複本的話,貿然更換 Mail Server 是會造成使用者的 MUA 將複本重新再下載一次

在使用者端就會有相同的重複信件,一般的使用者可能安撫一下就好了,但要是大頭級的也這樣就頭痛了

 

 

當然也會有人說,教使用者把備份複本都收下來不要保留就好了,但若是公司規模幾千甚至幾萬人,總有一些不會用又會抱怨的人提出質疑。

 

本篇就是要釐清 MUA 和 POP3 之間如何去判斷使用者已經收過這一封信

 

在 POP3 將信件收進來的時候都會賦予每封信件一個獨有的 ID,這個ID就叫做 UIDL (UID List)

 

UIDL 是由 POP3 決定命名,然後 POP3 跟 MUA 各擁有一份

當 MUA 收下信件 A,B,C,雙方都擁有 A,B,C 紀錄

當新信件 D 到 POP3 了,MUA 再次收信時就會知道 ABC 已經收下來了,而 D 是新信件進行下載

 

 

UIDL規則

以 Dovecot 為例

$ vim /etc/dovecot/conf.d/20-pop3.conf

pop3_uidl_format = %08Xu%08Xv

pop3_uidl_format 就是負責每封郵件的 UIDL 規則

 

POP3 上的 UIDL

用 telnet 登入來查看使用者的 UIDL

$ telnet email.com.tw 110
+OK
user boss
+OK
pass goojob
+OK
uidl
+OK
1 9f8861026478bf4a
2 75c99f8422a2b5ff
3 bb706e062b009d16

9f8861026478bf4a 就代表郵件的 UIDL

 

 

MUA 上的 UIDL

以 Thunderbird 為例,通常在使用者底下的 AppData 內有一隻 popstate.dat

C:\Users\boss\AppData\Roaming\Thunderbird\Profiles\7djqubx4.default\Mail\email.com.tw\popstate.dat

裡面記載著上次收信的 UIDL 紀錄

 

 

 

只要得知上述的資訊,讓 MUA 跟 POP3 的 UIDL 相同就可以避免更換 MailServer 重複收信的問題。

 

 

 

 

參考資料:

Dovecot as a POP3 server

 

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱