摘要:使用 .NET 2.0 寄送以 BIG5 編碼的電子郵件
自從開始翻譯書籍,寫程式練功的時間就變少了。碰巧有人問我寄送 e-mail 的問題,就順便將範例程式碼貼上來。
問題描述
利用程式發送 email 時,用 Outlook 收信都可正常顯示,可是在瀏覽器上面用 Web mail 收信時,寄件者、收件者、信件標題、內文等欄位只要有中文字的部份都會變成亂碼。
如果利用瀏覽器把網頁的編碼切換成 UTF-8 就能正常顯示,可是這麼一來,網頁上的其他地方又變成亂碼,只有信件能正確顯示。而且,有些使用者還不知道如何切換網頁編碼。
解決方法
只要使用和 Web mail 網頁相同的編碼來指定 email 各欄位的編碼方式即可。此例的 Web mail 網頁是以 BIG5 編碼來顯示,因此寄送 email 的程式也要指定 BIG5 編碼。參考以下 C# 範例:
1 private void btnSend_Click(object sender, System.EventArgs e)
2 {
3 Encoding enc = Encoding.GetEncoding("BIG5");
4
5 MailMessage msg = new MailMessage();
6 msg.From = new MailAddress(MichaelSoft@huanlin.com, "賣擱軟", enc);
7 msg.To.Add(new MailAddress(someone@somewhere.com, "某人", enc));
8 msg.Subject = "MSF Essentials 中文版?";
9 msg.SubjectEncoding = enc; // 設定標題編碼
10 msg.Body = "聽說《Microsoft Solutions Framework Essentials》可能會有中文版,是真的嗎?";
11 msg.BodyEncoding = enc; // 設定內文編碼
12
13 SmtpClient client = new SmtpClient();
14 client.Host = txtSmtpServer.Text;
15 client.UseDefaultCredentials = true;
16 client.DeliveryMethod = SmtpDeliveryMethod.Network;
17
18 client.Send(msg);
19 }
此範例需引用(using)以下 namespaces:
- System.Net.Mail
- System.Text