しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

.NET 4.5 で SmtpClient の挙動が変わっていたらしい

.NET 4.5 で作ってるアプリケーションにメール送信機能があるんですが、どうも特定の環境で件名が文字化けする現象が発生しました。何故か件名の最後の方の文字だけ化けるという嫌な感じな化け方でした。

ちなみに、日本語の件名なので以下の記事のように ISO-2022-JP と Base64 でエンコードするような処理を書いていました。

SmtpClientで日本語(JIS)が化ける - Neutral Scent

しかし、これでも文字化けしていたので疑問に思っていたのですが、メールのソースを見ると明らかにエンコーディングがおかしくなっているようでしたので、それで検索してみるとこんな情報がありました。

.NET Framework 4.5 の System.Net.Mail で日本語の件名を ISO-2022-JP の Base64 でエンコードして送信する方法 - Exchange ブログ JAPAN - Site Home - TechNet Blogs

/(^o^)\

.NET 4.5 では内部でエンコードされた件名をデコードして持つように実装が変わったので、2 回エンコードして元の文字列が保持されるようにしないといけないということでした。

2 回エンコードしないといけないとか凄いバカっぽいけど、このように対策したところ文字化けしなくなりました。