- 締切済み
(C#)auに、絵文字をHTMLメールにて送信したい。
C#初心者です。 C#でauに、絵文字をHTMLメールにて送信したいのですが、 一部の絵文字は送信できるようになったのですが、 AUのE-MAIL送出用S-JISの絵文字CDの頭2ケタが(EB~EC)の絵文字が、すべて「・」になって、送信されてしまいます。 これらの絵文字も送れるようにしたいのですが、 どなたか絵文字・C#に詳しいかたいらっしゃいましたら、是非教えて下さい。 ------------------ using System; using System.Collections.Generic; using System.Text; using System.Net.Mail; using System.Net.Sockets; using System.IO; using System.Net.Mime; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Send_JIS_Mail(); } static string Enco(int code) //S-JIS 変換 { byte[] data = { (byte)(code / 256), (byte)(code % 256) }; return System.Text.Encoding.GetEncoding(932).GetString(data); } private static string myEncode(string str, Encoding enc) //base64 変換 { string base64str = Convert.ToBase64String(enc.GetBytes(str)); return string.Format("=?{0}?B?{1}?=", enc.BodyName, base64str); } private static void Send_JIS_Mail() { SmtpClient smtp = new SmtpClient(); MailMessage msg = new MailMessage(); Encoding myEnc = Encoding.GetEncoding("iso-2022-jp"); // 送信元 msg.From = new MailAddress( "XXXXXXXXXXXXXXXX@co.jp", myEncode("送信元", myEnc)); // 送信先 msg.To.Add(new MailAddress( "XXXXXXXXXXXXXXX@ezweb.ne.jp", myEncode("送信先", myEnc))); // 件名 msg.Subject = myEncode("件名", myEnc); msg.IsBodyHtml = true; // TEXTメール本文 msg.Body = "こんにちわ!!"; // HTMLメール本文 string sBody = "<html><body bgcolor = \"#ffff00\">" + "<div>絵文字⇒</div>" + Enco(0xEB59) + Enco(0xEB5A) + "</body></html>"; AlternateView altView = AlternateView.CreateAlternateViewFromString( sBody, myEnc, System.Net.Mime.MediaTypeNames.Text.Html); // Content-Transfer-Encoding: 7bit altView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit; // altViewをメッセージに追加 msg.AlternateViews.Add(altView); // SMTPサーバ smtp.Host = "XXXXXXXX.co.jp"; try { // 送信 smtp.Send(msg); } catch (SmtpException exc) { // SMTPサーバー接続失敗時のエラー処理 // メッセージは、excですので、それを表示してもOK。 } //後始末 msg.Dispose(); } } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>頭2ケタが(EB~EC)の絵文字が、すべて「・」になって、送信されてしまいます。 SJIS⇒JIS変換の >return System.Text.Encoding.GetEncoding(932).GetString(data); を確かめてみてください。 もし、このルーチンが「第1バイトがEBとECだったら、そこには漢字が無いので『・』のJISコードである0x2126を返す」とかやってたら、全部「・」になります。 こういう「実行時のロケールや、インストールされている文字セットの影響を受ける、標準的なコード変換ルーチン」は、上記のような「小さな親切、大きなお世話」な処理をしてくれるので、こういう場合は「使い物にならない」です。 こういう場合は「文字セットやコード定義域を完璧に無視した、独自のコード変換ルーチン」が必要です。 http://www.slayers.ne.jp/~oouchi/code/sjistojis.html を参考に、SJIS⇒JIS変換ルーチンを自作しましょう。 JISコードの前後に付けるESCシーケンスは http://www.slayers.ne.jp/~oouchi/code/jis.html を参考に。 基本的に「SJIS2バイト」を「ESC $ B JISコード2バイト ESC ( J」にすれば良いです。 ともかく >return System.Text.Encoding.GetEncoding(932).GetString(data); が「ESC $ B !& ESC ( J」を返して来てないか、確かめましょう。16進コードだと「1B 24 42 21 26 1B 28 4A」です。