我们目前使用SmtpClient发送电子邮件,通常每天大约有1000-5000封电子邮件。我们遇到了一些性能问题,有时发送命令需要很长时间。经过研究,我了解了MailKit以及它是如何取代SmtpClient的。通过阅读例子,每个人都需要
using (var client = new SmtpClient ()) {
client.Connect ("smtp.friends.com", 587, false);
// Note: only needed if the SMTP server requires authentication
client.Authenticate ("joey", "password");
client.Send (message);
client.Disconnect (true);
}
每条消息后都带有Disconnect。如果我计划按顺序发送许多消息,我是否仍然应该为每个消息调用一个新的SmtpClient实例并断开连接?处理一长串电子邮件发送的正确方法是什么?
发送单个消息后不需要断开连接。您可以不断地调用Send((方法,直到发送完消息为止。
一个简单的例子可能看起来像这样:
static void SendALotOfMessages (MimeMessage[] messages)
{
using (var client = new SmtpClient ()) {
client.Connect ("smtp.friends.com", 587, false);
// Note: only needed if the SMTP server requires authentication
client.Authenticate ("joey", "password");
// send a lot of messages...
foreach (var message in messages)
client.Send (message);
client.Disconnect (true);
}
}
一个更复杂的示例将考虑SmtpProtocolException和IOException
的处理,这通常意味着客户端断开连接。
如果您收到SmtpProtocolException
或IOException
,则保证需要重新连接。这些例外总是致命的。
另一方面,SmtpCommandException通常不会致命,通常不需要重新连接。您可以随时检查SmtpClient.IsConnected
属性进行验证。