回答編集履歴

4

MailKit が起動できなかった原因について言及

2023/09/27 14:10

投稿

KOZ6.0
KOZ6.0

スコア2657

test CHANGED
@@ -49,3 +49,27 @@
49
49
  1:「"」は大丈夫かな?
50
50
  列挙完了しました!
51
51
  ```
52
+
53
+ ---
54
+
55
+ ### さらに追記
56
+
57
+ MailKit が起動できなかったのは、exe.config のこの部分
58
+
59
+ ```XML
60
+ <runtime>
61
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
62
+ <dependentAssembly>
63
+ <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
64
+ <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
65
+ </dependentAssembly>
66
+ </assemblyBinding>
67
+ </runtime>
68
+ ```
69
+ が無かったためだっだようです。
70
+
71
+ 普通の .NET Framwork アプリにおいても、exe.config が無い環境では同じエラーで異常終了してしまいました。
72
+
73
+ 実は NetMail には、RFC に沿わないメールアドレスをチェックする機能があるんですが、チェックが入っているがために、RFCに沿わない日本の携帯のアドレスには送れないという不都合があります。
74
+ 今回は社内アドレスなのでそこは心配ないかなと思っていましたが、ソースをダウンロードしてアセンブリの参照をやりなおしてビルドすればよかったのかなという気もしてます。
75
+

3

文言修正

2023/09/26 09:02

投稿

KOZ6.0
KOZ6.0

スコア2657

test CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  ファイル出力してファイル名を渡す手もありますね。受け取った側は読んだら削除します。
9
9
 
10
- 引数については、原則として「"」でくくります。
10
+ 原則として引数を「"」でくくります。
11
11
  引数の中に「"」がある場合は、2つに変換してください。
12
12
  長さについては試しに 10,000 文字渡してみましたが大丈夫でした。
13
13
  コマンドプロンプトには 8191 文字という制限がありますが、直接渡す分には問題なさそうです。

2

引数の説明を追加

2023/09/26 08:11

投稿

KOZ6.0
KOZ6.0

スコア2657

test CHANGED
@@ -2,10 +2,16 @@
2
2
 
3
3
  ---
4
4
  ### 追記
5
- 別 exe にしてキックしないのは何故でしょうか?
6
- どうやって引数を渡すかわからないってことでしょうか?
7
- メールなので改行や区切り文字が含まれますが、適切に処理することで渡せます。
5
+ 引数についてはメールなので改行や区切り文字が含まれますが、適切に処理することで渡せます。
8
6
  もちろん、標準出力をリダイレクトして結果を受け取ることもできます。
7
+
8
+ ファイル出力してファイル名を渡す手もありますね。受け取った側は読んだら削除します。
9
+
10
+ 引数については、原則として「"」でくくります。
11
+ 引数の中に「"」がある場合は、2つに変換してください。
12
+ 長さについては試しに 10,000 文字渡してみましたが大丈夫でした。
13
+ コマンドプロンプトには 8191 文字という制限がありますが、直接渡す分には問題なさそうです。
14
+ 以下サンプルです。
9
15
 
10
16
  ```csharp
11
17
  public static void Main(string[] args) {

1

引数の渡し方について

2023/09/26 07:24

投稿

KOZ6.0
KOZ6.0

スコア2657

test CHANGED
@@ -1 +1,45 @@
1
1
  MailKit を直接使えないなら、別 exe にしてキックしたらどうでしょうか?
2
+
3
+ ---
4
+ ### 追記
5
+ 別 exe にしてキックしないのは何故でしょうか?
6
+ どうやって引数を渡すかわからないってことでしょうか?
7
+ メールなので改行や区切り文字が含まれますが、適切に処理することで渡せます。
8
+ もちろん、標準出力をリダイレクトして結果を受け取ることもできます。
9
+
10
+ ```csharp
11
+ public static void Main(string[] args) {
12
+ if (args.Length > 0) {
13
+ Console.WriteLine("引数を列挙します!");
14
+ for (int i = 0; i < args.Length; i++) {
15
+ Console.WriteLine($"{i}:{args[i]}");
16
+ }
17
+ Console.WriteLine("列挙完了しました!");
18
+ } else {
19
+ string value1 = "吾輩は猫である。\n名前はまだない(改行はOK?)";
20
+ string value2 = @"「""」は大丈夫かな?";
21
+ string[] arguments = {
22
+ "\"" + value1.Replace("\"", "\"\"") + "\"",
23
+ "\"" + value2.Replace("\"", "\"\"") + "\"",
24
+ };
25
+ ProcessStartInfo info = new ProcessStartInfo();
26
+ info.FileName = System.Reflection.Assembly.GetEntryAssembly().Location;
27
+ info.Arguments = string.Join(" ", arguments);
28
+ info.UseShellExecute = false;
29
+ info.RedirectStandardOutput = true;
30
+ using (var p = Process.Start(info)) {
31
+ var reader = p.StandardOutput;
32
+ Console.WriteLine(reader.ReadToEnd());
33
+ p.WaitForExit();
34
+ }
35
+ Console.ReadKey();
36
+ }
37
+ }
38
+
39
+ 結果:
40
+ 引数を列挙します!
41
+ 0:吾輩は猫である。
42
+ 名前はまだない(改行はOK?)
43
+ 1:「"」は大丈夫かな?
44
+ 列挙完了しました!
45
+ ```