1

メールサーバーがインストールされたWindowsサーバー2008があります。受信する電子メールごとに C# アプリケーションが起動され、一連のオプションのフィルターを介してメッセージをパイプ処理し、通過させるかどうかを決定します。

私はすでにいくつかの「自作」フィルタを実装していますが、SpamAssassin の機能を活用するために 1 つ追加したいと考えています。SA は UNIX ベースなので、そのウィンドウ ポート ( SAWin32 ) を使用しています。コマンド ラインから SpammAssassin を直接起動すると、電子メールが正しく分析されます。

spamassassin.exe  -L -e < C:\SPAM.MAI

(-L はローカル テストのみを有効にし、テストされたメッセージがスパムであった場合、-e はゼロ以外の値で終了します)

しかし、C# アプリケーションから起動しようとすると、戻り値が常に 2 であるため (ハム メッセージであっても)、動作しないようです。

Process proc = new Process();
proc.StartInfo.FileName = @"C:\spamassassin.exe";
proc.StartInfo.Arguments = " -L -e < C:\SPAM.MAI";
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
proc.Start();
proc.WaitForExit();
int exitCode = proc.ExitCode;
Console.WriteLine("Exit code: " + exitCode);
proc.Close();

私のコードに何か問題があるかどうか、および/または C# コンソール アプリケーションから SAWin32 を起動した経験があるかどうかを知りたいですか?

どうもありがとう!

4

1 に答える 1

1

しばらく掘り下げて Ian P のコメントを読んだ後、ようやく機能するようになりました。

        Process p = new Process();
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.UseShellExecute = false;

        p.StartInfo.Arguments = @" /C C:\spamassassin.exe -e -L < C:\SPAM_TEST.MAI";
        p.StartInfo.FileName = @"C:\WINDOWS\System32\cmd.exe";
        p.OutputDataReceived += (sender, arguments) => Console.WriteLine("Received output: {0}", arguments.Data);
        p.Start();
        p.BeginOutputReadLine();
        p.WaitForExit();
        Console.WriteLine("Exit code: " + p.ExitCode);
        p.Close();

/C パラメータは、コマンドを実行してから終了するように CMD に指示します。

これが誰かを助けることを願っています!

于 2010-08-17T15:39:13.483 に答える