使用 MailKit 处理一长串电子邮件
Using MailKit for a long queue of emails
我们目前使用 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);
}
每条消息后断开连接。如果我计划按顺序发送多条消息,我是否仍应为每条消息调用一个新的 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
属性 来验证。
我们目前使用 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);
}
每条消息后断开连接。如果我计划按顺序发送多条消息,我是否仍应为每条消息调用一个新的 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
属性 来验证。