如何解决使用 MailKit 处理一长串电子邮件
我们目前使用 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
属性进行验证。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。