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”,所以它会打开一个新窗口,也许如果我写一个命令行就可以了。我试过了,但没有成功。

4

2 回答 2

6

您确实应该使用SmtpClient.NET 框架中的类。

于 2012-09-13T11:52:29.617 回答
2

您可以在一个 compose 参数中使用多个电子邮件地址,如命令行参数 - Thunderbird中所示的示例。

因此,与其在每个循环中启动进程,不如加入所有电子邮件地址,然后再启动一个进程。这很简单,使用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 回答