星期一, 12月 06, 2010

利用MailMessage 寄信時,主旨過長時在 Thunderbird和Mail.app會亂碼的問題

最近在寫某個簡單的小程式時,因為有寄發提醒郵件的需求,就利用MaiMessage寫了一個簡單的寄信程式,測試都很正常,但是到了ThunderbirdMail.app卻分別出現了截斷與亂碼的問題。


圖:在Thunderbird下的情況
圖:在Mail.app下的情況
圖:在Windows Live Mail則是完全正常



所以要看原始內容到底發生什麼事,原來在13個UTF-8字元時主旨是編碼成
Subject: =?utf-8?B?6KGM5LqL5puG5o+Q6YaS77ya57mz5L+d6Zqq6LK7ICjlgIs=?=
但是到了14個UTF-8字元時卻變成
Subject: =?utf-8?B?6KGM5LqL5puG5o+Q6YaS77ya57mz5L+d6Zqq6LK7ICjlgIvk?=
 =?utf-8?B?uro=?
原來是主旨被MaiMessage切成二段,ThunderbirdMail.app無法解讀。


利用股溝搜尋一下,發現保哥曾經遇到MailMessage發Big5編碼的問題,但是我是以UTF-8寄,應該不一樣,後來發現璉大有遇到類似的Header問題,他用自己寫的class解決,於是我參考這裏的做法,將Subject自行編碼就搞定了。

mailMessage.Subject = string.Format(@"=?UTF-8?B?{0}?=", Convert.ToBase64String(Encoding.UTF8.GetBytes(subject)));

圖:在Thunderbird完全正常了

沒有留言: