2

c# の Thunderbird で多くの人にメールを送っています。ループでやってます。私の問題は、アプリケーションを実行すると、送信する電子メールに対して新しい Thunderbird ウィンドウが開き、「送信」を押す必要があるため、送信されることです。とても不便です。一度にすべてのメールを送信するにはどうすればよいですか?

私のコード:

string strCommand;
for(i=0;i<100;i++)
{
   strCommand = " -compose to=" + (char)34 + astrRecip[i] + (char)34 + ",";
   strCommand += "body=" + (char)34 + strMessage[i] + (char)34 + ",";
   strCommand += "subject=" + (char)34 + strSubject + (char)34 + ",";
   strCommand += "attachment=" + (char)34 + strAttachment[i] + (char)34;
   Process.Start(@"C:\Program Files\Mozilla Thunderbird\thunderbird", strCommand);
}

私はすべてのメールに「-compose」と書いて別ウィンドウで開いているので、たぶんコマンドラインを1行書けばOKだと思います。試しましたが、成功しませんでした。

4

2 に答える 2

6

SmtpClient.NET フレームワークのクラスを実際に使用する必要があります。

于 2012-09-13T11:52:29.617 に答える
2

コマンド ライン引数 - Thunderbirdに例が示されているように、1 つの構成引数で複数の電子メール アドレスを使用できます。

そのため、ループごとにプロセスを開始するのではなく、すべてのメール アドレスを結合して、後で 1 つのプロセスを開始します。これはstring.Joinを使用すると簡単です。

string strCommand;
strCommand = " -compose to=" + (char)34 + string.Join(",", astrRecip) + (char)34 + ",";
strCommand += "body=" + (char)34 + strMessage[i] + (char)34 + ",";
strCommand += "subject=" + (char)34 + strSubject + (char)34 + ",";
strCommand += "attachment=" + (char)34 + strAttachment[i] + (char)34;
Process.Start(@"C:\Program Files\Mozilla Thunderbird\thunderbird", strCommand);

編集:「\を使用したい場合は」をエスケープできることに注意してください。したがって、使用する代わりに(char)34入力できます

strCommand = " -compose to=\"" + string.Join(",", astrRecip) + "\",";

文字列形式を使用すると、さらに読みやすくなります。

strCommand = string.Format("-compose to=\"{0}\",", string.Join(",", astrRecip));

文字列をその引数から分離するためです。

于 2012-09-13T12:45:58.647 に答える