回答編集履歴

3

utf-8文字列ならそのままでいける旨を追記

2018/03/03 23:32

投稿

HARQ
HARQ

スコア181

test CHANGED
@@ -101,3 +101,9 @@
101
101
  ```
102
102
 
103
103
  あとは受信側のメーラー次第かなと。
104
+
105
+
106
+
107
+ ---
108
+
109
+ 上では自前のencodeを実現するために細々とやりましたが、utf-8のBASE64ならsubjectへutf-8文字列を代入するだけで、あとは上手くやってくれたはず……。

2

コード例追加など

2018/03/03 23:31

投稿

HARQ
HARQ

スコア181

test CHANGED
@@ -1,6 +1,4 @@
1
1
  先日[別の質問](https://teratail.com/questions/115221)で提示させて頂いた、[MimeKit/Rfc2047.cs](https://github.com/jstedfast/MimeKit/blob/cde045500be487a3002bae522cf93338cc1ef861/MimeKit/Utils/Rfc2047.cs)を一読されるようお勧めします。
2
-
3
-
4
2
 
5
3
  EncodePhrase() または EncodeText()
6
4
 
@@ -14,10 +12,92 @@
14
12
 
15
13
  AppendEncodedWord()では、942行目の
16
14
 
15
+ ```
16
+
17
- ```if (CharsetRequiresBase64(charset) || GetBestContentEncoding(word, 0, len) ```
17
+ if (CharsetRequiresBase64 (charset) || GetBestContentEncoding (word, 0, len) == ContentEncoding.Base64) {
18
+
19
+ ```
18
20
 
19
21
  でBase64/Quoted-printableを切り替えています。
20
22
 
21
23
 
22
24
 
23
25
  これらの情報を参考に、必要な部分を抜き出せばやりたいことは実現出来ると思います。
26
+
27
+ (GetBestContentEncoding()の戻り値相当を、変更or指定出来れば良いのですが……)
28
+
29
+
30
+
31
+ ---
32
+
33
+ 検証に使えるsmtpサーバが無かったので、[smtp4dev](https://archive.codeplex.com/?p=smtp4dev)を使って確認してみました。
34
+
35
+
36
+
37
+ ```C#
38
+
39
+ var subject = "吾輩は猫である。1.2.3.名前はまだ無い。";
40
+
41
+ var encoded = Rfc2047.EncodePhrase(Encoding.UTF8, subject);
42
+
43
+
44
+
45
+ var message = new MimeMessage();
46
+
47
+ message.From.Add(new MailboxAddress("harq@foo"));
48
+
49
+ message.To.Add(new MailboxAddress("harq@bar"));
50
+
51
+ message.Subject = Encoding.ASCII.GetString(encoded);
52
+
53
+ message.Body = new TextPart("plain") { Text = @"Hello World" };
54
+
55
+
56
+
57
+ using (var smtp = new SmtpClient())
58
+
59
+ {
60
+
61
+ smtp.Connect("localhost", 25);
62
+
63
+ smtp.Send(message);
64
+
65
+ smtp.Disconnect(true);
66
+
67
+ }
68
+
69
+ ```
70
+
71
+ smtp4dev画面
72
+
73
+ ![smtp4dev画面](244caaabced7487023d4108d0aef662a.png)
74
+
75
+ Viewの結果
76
+
77
+ ```
78
+
79
+ From: harq@foo
80
+
81
+ Date: Sun, 04 Mar 2018 01:31:41 +0900
82
+
83
+ Subject:
84
+
85
+ =?utf-8?b?5ZC+6Lyp44Gv54yr44Gn44GC44KL44CCMS4yLjMu5ZCN5YmN44Gv44G+44Gg54Sh?=
86
+
87
+ =?utf-8?b?44GE44CC?=
88
+
89
+ Message-Id: <NFBL3KIPS3U4.QV9M8QV27FCR3@xxxxxxxxx>
90
+
91
+ To: harq@bar
92
+
93
+ MIME-Version: 1.0
94
+
95
+ Content-Type: text/plain; charset=utf-8
96
+
97
+
98
+
99
+ Hello World
100
+
101
+ ```
102
+
103
+ あとは受信側のメーラー次第かなと。

1

訂正。getのみでした。

2018/03/03 16:41

投稿

HARQ
HARQ

スコア181

test CHANGED
@@ -20,8 +20,4 @@
20
20
 
21
21
 
22
22
 
23
- 一行の長さについては、EncodePhrase()/Text()の引数である、FormatOptionsで指定できたと思います。
24
-
25
-
26
-
27
23
  これらの情報を参考に、必要な部分を抜き出せばやりたいことは実現出来ると思います。