在 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 重複收信的問題。
參考資料: