自從開始翻譯書籍,寫程式練功的時間就變少了。碰巧有人問我寄送 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