使用 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);
    }
}

一个更复杂的示例将考虑处理 SmtpProtocolExceptionIOException,这通常意味着客户端已断开连接。

如果您收到 SmtpProtocolExceptionIOException,您肯定需要重新连接。这些异常总是致命的。

另一方面,

SmtpCommandException 通常不会致命,您通常不需要重新连接。您可以随时查看 SmtpClient.IsConnected 属性 来验证。