質問編集履歴

4

追記のため

2018/03/03 15:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,6 @@
1
1
  ##現状
2
+ (頂きました回答を元に、文末に追記致しました)
3
+
2
4
  以下の環境で、メーラーを作成しているのですが。
3
5
  subjectを作成する際にBase64へUTF-8の文字列をエンコードしています。
4
6
  エンコードする文字列のなかに記号や半角文字が入った状態でエンコードしメールを送信すると、
@@ -52,12 +54,68 @@
52
54
 
53
55
  何卒ご教授のほど、よろしくお願い致します。
54
56
 
55
-
56
-
57
57
  ###成功例と失敗例
58
58
 
59
59
  ①成功例画像
60
60
  ![成功例](96e8abb141f92621806d3a75a32f7380.png)
61
61
 
62
62
  ②失敗例画像
63
- ![失敗例](9ad1bb72e337e8ceda21dea8fa216970.png)
63
+ ![失敗例](9ad1bb72e337e8ceda21dea8fa216970.png)
64
+
65
+ ---
66
+
67
+ ##追記(1)
68
+ 文字列中にCRが混入しているとのコメントを頂き、以下のようにコードを編集致しました。
69
+
70
+ ```c#
71
+ string sub = "あいうえおかきくけこさしすせそなにぬねのはひふへほ";
72
+
73
+ MimeKit.Encodings.Base64Encoder ed = new MimeKit.Encodings.Base64Encoder();
74
+ System.Text.Encoding charEcd = System.Text.Encoding.UTF8;
75
+
76
+ byte[] cc = charEcd.GetBytes(sub);
77
+ byte[] nnn = new byte[1000];
78
+ ed.Encode(cc, 0, cc.Length, nnn);
79
+
80
+ byte[] bb = charEcd.GetBytes("\n");
81
+ byte[] nb = new byte[1000];
82
+
83
+ int ii = 0;
84
+ for (int i = 0; i < nnn.Length;i++)
85
+ {
86
+ if (nnn[i] != bb[0])
87
+ {
88
+ nb[ii] = nnn[i];
89
+ ii = ii + 1;
90
+ }
91
+ }
92
+
93
+ string ttt = charEcd.GetString(nb).TrimEnd('\0');
94
+ m_subject = string.Format("=?{0}?B?{1}?=", charEcd.BodyName, ttt);
95
+
96
+
97
+ ```
98
+
99
+ 新しく編集したコードでエンコードした文字列は以下となります
100
+ (エンコードした文字列はブレークポイントで停止し抽出したエンコードした文字列です)
101
+ ```
102
+ - 元の文字列:あいうえおかきくけこさしすせそなにぬねのはひふへほ
103
+ - エンコードした文字列:=?utf-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd44Gq44Gr44Gs44Gt44Gu44Gv44Gy44G144G444G7?=
104
+ ```
105
+
106
+ ###問題点
107
+ ネットなどにあるツールを用いると、元の文字列の通り「あいうえおかきくけこさしすせそなにぬねのはひふへほ」とデコードすることができます。
108
+ しかし実際にメールとして送信し、受信メーラー(複数メーラーにて確認済み)しすると、どれもデコードに失敗し、エンコードした文字列のまま表示されてしまっていました。
109
+
110
+ どのようにしたらメーラーのsubjectでエンコードした文字列を表示できるのでしょうか?
111
+
112
+ 何卒、ご教授をお願い致します。
113
+
114
+
115
+ ###試したこと
116
+ エンコードした文字列が長すぎるのかとも思い、以下のように複数行へエンコードも実践致しました。
117
+ ```
118
+ =?utf-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd?=
119
+ =?utf-8?B?44Gq44Gr44Gs44Gt44Gu44Gv44Gy44G144G444G7?=
120
+ ```
121
+ しかし結果は問題点同様の結果しか得ることができませんでした。

3

今後の展望を付け加えました

2018/03/03 15:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -9,7 +9,8 @@
9
9
 
10
10
  ##やりたいこと
11
11
  subjectの文字列がしっかりとデコードされ、文章として読めるようになること。
12
- (文字列はUTF-8だけでなく、ASCIIやShift-JIS、iso-2022-jpなどを用いることも視野に入れています)
12
+ 今後:文字列はUTF-8だけでなく、ASCIIやShift-JIS、iso-2022-jpなどを用いることも視野に入れています)
13
+ (今後:Base64だけでなく、quoted-printableでのエンコードも考えています)
13
14
 
14
15
  ###使用環境
15
16
  PC:MacOSX

2

やりたいことを追記しました。

2018/03/03 14:31

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -7,6 +7,9 @@
7
7
 
8
8
  何卒、ご教授の程よろしくお願い致します。
9
9
 
10
+ ##やりたいこと
11
+ subjectの文字列がしっかりとデコードされ、文章として読めるようになること。
12
+ (文字列はUTF-8だけでなく、ASCIIやShift-JIS、iso-2022-jpなどを用いることも視野に入れています)
10
13
 
11
14
  ###使用環境
12
15
  PC:MacOSX

1

タイトルに誤りがありました。

2018/03/02 17:19

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- Mime規格に則ったメールのsubjectを作成する際に、Base64でエンコードする文字列の途中に記号があると文章にデコードされません。
1
+ Mime規格に則ったメールのsubjectを作成する際に、Base64でエンコードする文字列の途中に記号があると文字列としてデコードされません。
body CHANGED
File without changes