.Net 4.0 System.Net.Mail寄送過長中文檔名附件的Bug

摘要:.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一下好了,沒想到找到了這篇:

http://social.msdn.microsoft.com/Forums/en-US/67414337-19a6-4128-b1a0-212404cc2cb1/bug-in-systemnetmail-net-4

裡面提到這是.Net 4.0的Bug,微軟提供的解法連結如下:

http://support.microsoft.com/kb/2402064/en-us

此KB明確提到若附件含有非ASCII字元且長度大於41Bytes(指以UTF-8編碼後的長度)時,會在傳送前被編碼2次,也提供了Hotfix可修正此問題!

安裝完成後需重開機,即可正常發送囉!