摘要:.Net 4.0 System.Net.Mail寄送含中文檔名的附件時,若檔名過長將會發生檔名被編碼而無法讀取的Bug說明及其解法!
系統全面從.Net 2.0升級到4.0後,繼上次Crystal Report套表列印的問題外,今天又冒出Mail的附件檔名如果遇到含中文,且合計14個字以上(大約值,正確大小請往下看)時,檔名就會被編碼成Base64字串,如下圖:
Google了2天,試了很多種方式,例如先將附件檔名編碼後再指定給Attachment.Name 或 是改變Attachment的NameEncoding,甚至到後來直接死馬當活馬醫了,連標題、內文及附件的傳送及編碼都調整一番,都沒有用!
就在即將放棄,準備以Work around方式(將附檔先行壓縮或以程式縮短檔名長度至不會出錯的範圍)處理時,想說以全英文來google一下好了,沒想到找到了這篇:
裡面提到這是.Net 4.0的Bug,微軟提供的解法連結如下:
http://support.microsoft.com/kb/2402064/en-us
此KB明確提到若附件含有非ASCII字元且長度大於41Bytes(指以UTF-8編碼後的長度)時,會在傳送前被編碼2次,也提供了Hotfix可修正此問題!
安裝完成後需重開機,即可正常發送囉!
