Ted*_*Ted 7 .net c# email smtpclient
我使用SmtpClient发送简单的电子邮件.
电子邮件大约25个字符(明文)所以它的小.
然而,它需要SmtpClient大约2000毫秒才能发送其中一个.我没有为每个发送创建SmtpClient - 这是在程序启动时创建的,所以唯一要做的就是:
DateTime start = DateTime.Now;
MailMessage oMsg = new MailMessage();
// TODO: Replace with sender e-mail address.
oMsg.From = new MailAddress(settings._Username);
oMsg.To.Add(new MailAddress(emailEvent._ContactItemToUse.Data));
oMsg.Subject = emo._Subject;
oMsg.BodyEncoding = Encoding.UTF8;
oMsg.IsBodyHtml = emo._IsHtmlText;
oMsg.Body = emo._Text;
client.Send(oMsg);
TimeSpan timeWasted = DateTime.Now.Subtract(start); // between 1000-2000 ms
Run Code Online (Sandbox Code Playgroud)
这当然非常糟糕,我无法弄清楚原因.你能?=)
我相信SmtpClient类不会为每个发送的邮件重用相同的连接(编辑:显然现在可以在.NET 4.0中使用,请参阅SmtpClient文档中的差异).打开新连接很昂贵,这可能需要时间.有商业SMTP组件可以提供更高的性能.根据SMTP服务器和邮件大小,可以实现至少50个/秒的速度.
但是,如果稍微更改架构,这对您来说可能不是问题.我在我的应用程序中做的是,SmtpClient通过使用smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory并将PickupDirectoryLocation设置为所需目录,将邮件传递到文件夹.它的作用是,它不是通过网络发送邮件消息,而是将它们作为标准的mime消息(.eml格式)写入指定的文件夹.
在这里,您可以使用IIS SMTP服务器,也可以只创建另一个后台线程/进程来使用创建的.eml文件,并将它们传递给收件人或其他SMTP服务器.
我认为这种方法更优越,仅仅因为:
作为一种更简单的方法,您可以使用SendAsync而不是Send,但它并未提供PickupDirectory方法将提供的所有直接方法.