- Vixual - http://www.vixual.net/blog -

如何建立與 Outlook 相容的 IMap 目錄(PHP)

我們公司的郵件伺服器是用 IMap 協定來讀取電子郵件 (因為 IMap 的郵件是放在伺服器上,不怕用戶的電腦中毒,就算用戶的硬碟毀了,郵件也都還在),因為這個原因,所以我必須要找一個可以支援 IMap 的 Webmail。

找啊找,支援 IMap 的 Webmail 是有找到幾個,可是卻找不到可以相容於 Outlook 的!

為何說無法相容於 Outlook 呢? 以 Outlook 上的「寄件備份」及「草稿」這兩個郵件匣為例,Outlook 便會在 Linux 伺服器上的用戶目錄下分別建立「&W8RO9lCZTv0-」及「&g0l6Pw-」這兩個檔案存放郵件。問題出在我所找到的 Webmail 程式大多不允許用戶建立中文郵件匣,即使可以建立,也不會轉換成像「&W8RO9lCZTv0-」、「&g0l6Pw-」這樣奇怪的名稱,更何況要從這兩個檔案存取郵件!

於是我就找一個支援 IMap 協定、使用上我也覺得比較順手的 Webmail: UebiMiau 去改,但它就像我說的,無法建立中文件郵件匣,於是我就用著我粗淺的 PHP 程式技術改啊改,改了一天,終於改好了,也可以相容 Outlook 了,真高興!

下面的程式片段只是列出郵件匣名稱的編碼及解碼方法…

中文郵件匣名稱的編碼、解碼

拜 Google 所賜,原來「寄件備份」及「草稿」變成了「&W8RO9lCZTv0-」及「&g0l6Pw-」是經過了「UTF-8」+「UTF-7」編碼所致,下面就是編碼及解碼的程式片段:

//編碼
$encode = mb_convert_encoding( iconv("BIG-5", "UTF-8//TRANSLIT", "寄件備份"), "UTF7-IMAP", "UTF-8" );
//解碼
$decode = iconv( "UTF-8","BIG-5//TRANSLIT", mb_convert_encoding( $encode, "UTF-8", "UTF7-IMAP" ) );

最後還是找到了

UebiMiau 在經過一連串的修改之後,雖然已經可以相容於 Outlook 了,但用了幾天,覺得它的功能還是太少,本來我打算拿 Open Webmail 再來改一改,而且也找到了 Perl 的改法 (請參考這一篇)。

不過,不小心找到另一套可以支援 IMap 又可轉換中文郵件匣名稱的 Webmail 系統,它就是 IlohaMail,它還支援多國語言及更換佈景主題,我已經改用這一套了。

所以,這一段時間,我只有學會 IMap 對於郵件匣名稱的編碼、解碼。

參考網頁