.NET2.0でのメール送信と文字化けのテスト
お仕事で作った.NET2.0アプリのメール送信と文字化けのテストを行いました。さすがに文字化けのテストはテスト駆動開発というわけにもイカンので、実際に自分の目で見て確認しました。面倒だけどしょうがない。
メール送信の実装のポイントは、MailMessageクラスのEncoding関連のプロパティでした。
まずは、メール本文のエンコーディングであるBodyEncodingプロパティ。こちらはデフォルトで"us-ascii"が使用されるとのこと、そりゃ文字化けするよなぁ。。。こちらはISO-2022-JPに変更してあげることで対応できました。
一番やっかいだったのが、メール件名のエンコーディング。当初は、メール本文と同様にSubjectEncodingプロパティをISO-2022-JPに変更して試してみましたがどうしてもG-MAILで文字化けしてしまう...
いろいろ調べてみて結局おがわみつぎさんの下記ブログを参考にして、件名を自分でBASE64にエンコーディングして解決しました。
おがわみつぎさんブログ
http://blogs.sqlpassj.org/mitsugi/archive/2006/02/23/16237.aspx
ちなみに最終的にこんな感じの実装になりました。
... MailMessage email = new MailMessage(fromAddress, toAddress); email.BodyEncoding = System.Text.Encoding.GetEncoding("csISO2022JP"); email.Subject = ConvertBase64Subject(System.Text.Encoding.GetEncoding("csISO2022JP"), "件名です"); ... internal string ConvertBase64Subject(Encoding subjectEncoding, string sourceText) { string subjectFormat = "=?{0}?B?{1}?="; return string.Format( subjectFormat, subjectEncoding.HeaderName, Convert.ToBase64String(subjectEncoding.GetBytes(sourceText), Base64FormattingOptions.None) ); }
で、最終的にSubjectEncodingプロパティは使用しませんでした。使うとQエンコードに勝手になっちゃうので文字化けしちゃうんですよ、これが。
私が実際にテストしたメールクライアントを後世に残しておきます。。。というのは大袈裟だけど(^^;;
ちなみにHTMLメールはテストしてないのであしからず。
メールクライアント | 件名 | 本文 | 備考 | |
---|---|---|---|---|
Outlook 2003 | ○ | ○ | ||
Outlook Express 6 | ○ | ○ | ||
Beckey V2 | ○ | ○ | ||
Thunderbird(FireFox)1.5.05 | ○ | ○ | Shift-JISでは全て文字化け | |
Eudora 6.2J | ○ | ○ | ||
Hotmail | ○ | ○ | ||
Yahoo!メール | ○ | ○ | ||
G-MAIL | ○ | ○ | Shift-JISでは全て文字化け、Qエンコードでは件名文字化け | |
gooメール | ○ | ○ | ||
Exciteメール | ○ | ○ | Shift-JISでは件名が文字化け | |
Infoseekメール | ○ | ○ | Shift-JISでは本文が文字化け | |
AU W21S | ○ | ○ | 携帯メール | |
AU A5505SA | ○ | ○ | 携帯メール | |
DOCOMO F901iC | ○ | ○ | 携帯メール | |
DOCOMO 506i | ○ | ○ | 携帯メール | |
VODAFONE 802SE | ○ | ○ | 携帯メール | |
R25モバイルサイトフリーメール | ○ | ○ |
全てのインターネットフリーメールをテストするのは無理なので、こんなところで。
結論は。
本文 -> BodyEncodingプロパティをISO-2022-JPエンコーディングを指定する
件名 -> 自分でBASE64エンコーディングしてあげる
こんなとこでしょうか。