Удалите SmtpClient в SendComplete? - PullRequest
9 голосов
/ 14 апреля 2011

Когда я использую SendAsync SmtpClient для отправки электронной почты, как правильно расположить экземпляр smtpclient?

Допустим,


MailMessage mail = new System.Net.Mail.MailMessage()
{
   Body = MailBody.ToString(),
   IsBodyHtml = true,
   From = new MailAddress(FromEmail, FromEmailTitle),
   Subject = MailSubject
};
mail.To.Add(new MailAddress(i.Email, ""));
SmtpClient sc = new SmtpClient(SmtpServerAddress);
//Add SendAsyncCallback to SendCompleted
sc.SendCompleted += new SendCompletedEventHandler(SendAsyncCallback);
//using SmtpClient to make async send (Should I pass sc or mail into SendAsyncCallback?)
sc.SendAsync(mail, sc);

В методе SendAsyncCallback я должен вызвать sc.Dispose() или mail.Dispose()?

Я проверил документ MSDN, в одном примере вызывается MailMessage.Dispose (), но будет ли этот метод dispose утилизировать экземпляр SmtpClient?

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

Вы должны утилизировать MailMessage и SmtpClient в SendAsyncCallback.

. Утилизация MailMessage не приведет к автоматическому удалению SmtpClient (поскольку вы можете отправить два сообщения с одним и тем же SmtpClient,и вы не хотели бы, чтобы клиент был утилизирован, как только вы удалили первое сообщение).

0 голосов
/ 28 января 2013

Этот пример: из документации библиотеки MSDN закрывает только Сообщение, поэтому я собираюсь использовать это в моей реализации: SmtpClient.SendAsync Method

message.Dispose();

Я столкнулся с этимпроблема, о которой идет речь в этом вопросе, когда отправка всегда отменялась, поэтому я удаляю оператор using {}: SmtpClient.SendAsync Вызовы автоматически отменяются

Хорошо, я только что попытался выполнитьmessage.Dispose () и даже это выдает ошибку, говорящую, что не может отправить электронное письмо из-за удаления сообщения.Возможно, потому что мое приложение asp.net mvc, а пример - консольное приложение.В любом случае сборщик мусора должен подобрать эти опции, как только все выпадет из области видимости ...

...