- 題名: auスマートフォンにメールした時の本文文字化け
- 日時: 2011/09/27 17:48:51
- ID: 29103
- この記事の返信元:
- (なし)
- この記事への返信:
- [29105] Re[1]: auスマートフォンにメールした時の本文文字化け2011/09/27 19:49:18
- ツリーを表示
メールメッセージは正しいけれども、スマートフォンのメーラーが正しく解釈
できない。または、メールメッセージの情報に齟齬があって、スマートフォン
のメーラーが正しく解釈できない。そのあたりを突き詰める必要があるのだと
思います。
送信時のメールメッセージの情報に齟齬があるという特殊な状況を想定したば
あいの話なのですが、プログラムですこし気になるところがあります。
Shift_JISを扱うEncodingオブジェクトのBodyNameプロパティはiso-2022-jpを
返します。AlternateView.CreateAlternateViewFromStringメソッドの引数に
Encodingオブジェクトを指定するばあい、AlternateViewオブジェクトは
EncodingオブジェクトのBodyNameプロパティを参照してメールメッセージの
Charsetを出力します。
Dim textContent As String = "わんだほ"
Dim sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim plainType As String = System.Net.Mime.MediaTypeNames.Text.Plain
Dim textView As System.Net.Mail.AlternateView = System.Net.Mail.AlternateView.CreateAlternateViewFromString _
(textContent, sjis, plainType)
たとえば上記のようにAlternateViewを構成したばあい。
Content-Type: text/plain; charset=shift_jis
Content-Transfer-Encoding: quoted-printable
=82=ED=82=F1=82=BE=82=D9
期待される出力は上ですが、実際の出力は下です。
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: quoted-printable
=82=ED=82=F1=82=BE=82=D9
本文がiso-2022-jpでエンコードされているということをcharsetは表しますが、
実際にはShift_JISで本文はエンコードされています。charsetと実際のエンコ
ードの間に齟齬があります。
実際のエンコードにcharsetを合わせるか、または、charsetに実際のエンコー
ドを合わせればよいと思います。
Dim textContent As String = "わんだほ"
Dim textContentType As New System.Net.Mime.ContentType()
textContentType.MediaType = System.Net.Mime.MediaTypeNames.Text.Plain
textContentType.CharSet = "shift_jis"
Dim textView As System.Net.Mail.AlternateView = System.Net.Mail.AlternateView.CreateAlternateViewFromString _
(textContent, textContentType)
Dim textContent As String = "わんだほ"
Dim iso2022jp As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-2022-jp")
Dim plainType As String = System.Net.Mime.MediaTypeNames.Text.Plain
Dim textView As System.Net.Mail.AlternateView = System.Net.Mail.AlternateView.CreateAlternateViewFromString _
(textContent, iso2022jp, plainType)
分類:[.NET]
以下のソースでHTML形式のメール送信していますが、 (当然、text/plain 形式も組み込んでいます) Dim curClient As New SmtpClient(strSMTPHostName, 25) Dim msgTest As MailMessage msgTest = New MailMessage(strMailFrom, strTo) 'text/plain 形式の追加(Shift_JIS形式にする) Dim textView As System.Net.Mail.AlternateView textView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(strTextMsg, _ System.Text.Encoding.GetEncoding("Shift_JIS"), System.Net.Mime.MediaTypeNames.Text.Plain) msgTest.AlternateViews.Add(textView) 'HTML形式の追加(Shift_JIS形式にする) Dim htmlView As System.Net.Mail.AlternateView htmlView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(strHTMLMsg, _ System.Text.Encoding.GetEncoding("Shift_JIS"), System.Net.Mime.MediaTypeNames.Text.Html) msgTest.AlternateViews.Add(htmlView) 'メール送信 curClient.Send(msgTest) 宛先である、strTo が au携帯のメールアドレスの場合は、 Shift_JIS形式なのでHTML本文が文字化けしませんが、 au携帯のスマートフォンメールアドレスでは、 Shift_JIS形式であるにもかかわらず、HTML本文が文字化けする 現象が発生しました。 au携帯のスマートフォンメールアドレスにメール送信する際、 本文がShift_JIS形式で送信しても、HTML本文が文字化けする原因について 教えていただけませんでしょうか?