Вы должны всегда использовать using
using (var smtpClient = new SmtpClient())
{
smtpClient.SendMail(message);
}
Вы всегда должны распоряжаться всем, что реализует IDisposable, как только вы закончите с it.The класса SmtpClient в .NET 4.0 реализует IDisposable, поэтому обязательно используйте его!
Цитирую MSDN:
Класс SmtpClient не имеет какого-либо метода Finalize, поэтому приложение должно вызов Dispose явно освободить ресурсы.
Если вы обнаружите, что занимаетесь асинхронными задачами, вы можете создать новый экземпляр для каждого письма, чтобы предотвратить блокирование самостоятельно. Вы можете использовать следующее.
var smtpClient = new SmtpClient();
smtpClient.SendCompleted += (s, e) => {
client.Dispose();
message.Dispose();
};
client.SendAsync(message, null);
В Запроса - лучший вариант для Bulk Отправить сообщения электронной почты
Как было отмечено выше, вы можете использовать один и тот же клиент. Если держать все это в том же потоке, я рекомендую вам использовать только один клиент
MSDN государства:
Класс SmtpClient бассейны реализации SMTP соединения, так что может избежать накладных расходов на повторное установление соединения для каждого сообщения одному и тому же серверу. Приложение может повторно использовать тот же объект SmtpClient, чтобы отправлять много разных писем на тот же сервер SMTP и на множество разных SMTP-серверов.
Однако он идет дальше сказать:
... В результате, нет никакого способа определить, когда приложение закончил использование объекта SmtpClient, и он должен быть очищен.
Таким образом, предполагая, что вы распоряжаетесь своим Клиентом по завершении, это нормально.
Существует обсуждение ряда связанных SMTP тем, связанных ниже, как я недавно обнаружил, что задают тот же вопрос
Больше от Stackoverflow:
What are best practices for using SmtpClient, SendAsync and Dispose under .NET 4.0
How to dispose objects having asynchronous methods called?
Rela Ted Чтение:
MSDN SmtpClient
Implementing Finalize and Dispose to clean up managed resources
Я не согласен с частью «как только у вас есть шанс». и что это значит «как только» в моей заявке? Также создание SmtpClient требует времени, так как ему необходимо установить безопасное соединение. – Hooch
Это оставалось от моих сумасшедших прав. Нет ничего, что остановило бы вас на использовании одного клиента, особенно если вы полностью контролируете поток сообщений электронной почты, однако вы можете обнаружить, что вы получаете исключения, когда он не может отправлять электронные письма, потому что он все еще ждет ответа. Это не слишком дорого для создания, если вы ограничиваете сумму. Если вы решили использовать один клиент, возможно, используя BlockingCollection, и семафор может достичь этого – JonE
Я думаю, что я создам на клиенте за партию. Он выглядит более логичным, по одному на электронную почту и один раз за приложение. – Hooch