System.Net.Mail でメール送信時の文字化け対応

System.Net.Mail.MailMessageでメールを送信すると、Content-Transfer-Encoding が quoted-printableになるため携帯などに送ると文字化けしてしまいます。

おがわみつぎさんが対応するコードを書かれていたので、参考にさせて頂き文字化けせずに送信できました。
(現在は、PASSJが休会して見られないようです。)

public static void SendMail(string smtp, string subject, string body, string to, string from)
{
	Encoding enc = System.Text.Encoding.GetEncoding("csISO2022JP");
	using (System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(from, to))
	{
		// 1.件名をJISにエンコーディング、更にBASE64でエンコーディングしてから、
		//「=?{エンコーディングの名前}?B?{件名}?=」の形にする
		string subject64 = Convert.ToBase64String(enc.GetBytes(subject), Base64FormattingOptions.None);
		msg.Subject = String.Format("=?{0}?B?{1}?=", enc.HeaderName, subject64);

		// 2.本文は、System.Net.Mail.AlternateView を使用して、JISにエンコーディングにする
		System.Net.Mail.AlternateView htmlView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(
			body,
			enc,
			System.Net.Mime.MediaTypeNames.Text.Plain);

		// 3.「Content-Transfer-Encoding」 を「7bit」にする
		htmlView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;
		msg.AlternateViews.Add(htmlView);
		System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
		sc.Host = smtp;
		sc.Send(msg);
	}
	return;
}

 

最初(NET Framework 2.0)は、"Content-Transfer-Encoding"が"sevenbit" となっていたため、修正プログラム(http://support.microsoft.com/KB/927858)が必要だったみたいですが、NET Framework 3.5 で実行したところ、問題なく「content-transfer-encoding: 7bit」となっていました。

手持ちの docomo, au, SoftBank, Willcomにメールを送信したところ、件名も本文も文字化けなく、件名に「?」や「_」を入れても同じく文字化けなく表示できました。

Comments are closed.

Post Navigation