通过c#一起发送许多电子邮件由Thunderbird

时间:2012-09-13 11:49:49

标签: c# email command-line thunderbird

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

2 个答案:

答案 0 :(得分:6)

你真的应该使用.NET框架中的SmtpClient类。

答案 1 :(得分:2)

您可以在一个撰写参数中使用多个电子邮件地址,如Command line arguments - 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));

因为你从它的参数中分离出字符串。