##現状
(頂きました回答を元に、文末に追記致しました)
以下の環境で、メーラーを作成しているのですが。
subjectを作成する際にBase64へUTF-8の文字列をエンコードしています。
エンコードする文字列のなかに記号や半角文字が入った状態でエンコードしメールを送信すると、
受信したメーラーでsubjetがデコードされていない状態になってしまっています。
例と使用環境、現在のコードは以下に記載させていただきます。
何卒、ご教授の程よろしくお願い致します。
##やりたいこと
subjectの文字列がしっかりとデコードされ、文章として読めるようになること。
(今後:文字列はUTF-8だけでなく、ASCIIやShift-JIS、iso-2022-jpなどを用いることも視野に入れています)
(今後:Base64だけでなく、quoted-printableでのエンコードも考えています)
###使用環境
PC:MacOSX
環境:Visual Studio Community 2017 for Mac
言語:c#
###現状
以下のコードでsubjectを作成しています。
c#
1 2string sub = "我輩は猫である。名前はまだ無い。"; 3 4MimeKit.Encodings.Base64Encoder ed = new MimeKit.Encodings.Base64Encoder(); 5System.Text.Encoding charEcd = System.Text.Encoding.UTF8; 6 7sub = sub + "\n\r"; // 何故か末尾1文字が切れてしまうための対策 8byte[] cc = charEcd.GetBytes(sub); 9byte[] nnn = new byte[1000]; // outputされるバイト領域を多めに取っています 10 11ed.Encode(cc, 0, cc.Length, nnn); 12 13string ttt = System.Text.Encoding.UTF8.GetString(nnn); 14m_subject = string.Format("=?{0}?B?{1}?=", charEcd.BodyName, ttt.TrimEnd('\0')); 15 16Mimemes.Headers.Add(HeaderId.Subject, m_subject); 17
上記コード内(1行目)にある文字列が記載されている通りの場合は、以下の画像の成功例のようになります。
しかし、以下のようにすると失敗例の画像のようになってしまいます。
c#
1string sub = "吾輩は猫である。1.2.3.名前はまだ無い。"
どうすればしっかりとデコードされ、受信側メーラーの件名に
「吾輩は猫である。1.2.3.名前はまだ無い。」
と表示されるのでしょうか?
何卒ご教授のほど、よろしくお願い致します。
###成功例と失敗例
##追記(1)
文字列中にCRが混入しているとのコメントを頂き、以下のようにコードを編集致しました。
c#
1string sub = "あいうえおかきくけこさしすせそなにぬねのはひふへほ"; 2 3MimeKit.Encodings.Base64Encoder ed = new MimeKit.Encodings.Base64Encoder(); 4System.Text.Encoding charEcd = System.Text.Encoding.UTF8; 5 6byte[] cc = charEcd.GetBytes(sub); 7byte[] nnn = new byte[1000]; 8ed.Encode(cc, 0, cc.Length, nnn); 9 10byte[] bb = charEcd.GetBytes("\n"); 11byte[] nb = new byte[1000]; 12 13int ii = 0; 14for (int i = 0; i < nnn.Length;i++) 15{ 16 if (nnn[i] != bb[0]) 17 { 18 nb[ii] = nnn[i]; 19 ii = ii + 1; 20 } 21} 22 23string ttt = charEcd.GetString(nb).TrimEnd('\0'); 24m_subject = string.Format("=?{0}?B?{1}?=", charEcd.BodyName, ttt); 25 26
新しく編集したコードでエンコードした文字列は以下となります
(エンコードした文字列はブレークポイントで停止し抽出したエンコードした文字列です)
- 元の文字列:あいうえおかきくけこさしすせそなにぬねのはひふへほ - エンコードした文字列:=?utf-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd44Gq44Gr44Gs44Gt44Gu44Gv44Gy44G144G444G7?=
###問題点
ネットなどにあるツールを用いると、元の文字列の通り「あいうえおかきくけこさしすせそなにぬねのはひふへほ」とデコードすることができます。
しかし実際にメールとして送信し、受信メーラー(複数メーラーにて確認済み)しすると、どれもデコードに失敗し、エンコードした文字列のまま表示されてしまっていました。
どのようにしたらメーラーのsubjectでエンコードした文字列を表示できるのでしょうか?
何卒、ご教授をお願い致します。
###試したこと
エンコードした文字列が長すぎるのかとも思い、以下のように複数行へエンコードも実践致しました。
=?utf-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd?= =?utf-8?B?44Gq44Gr44Gs44Gt44Gu44Gv44Gy44G144G444G7?=
しかし結果は問題点同様の結果しか得ることができませんでした。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/03 18:08
2018/03/03 23:17