2011-04-14 9 views
9

Cuando uso SendAsync de SmtpClient para enviar correos electrónicos, ¿cómo puedo eliminar la instancia smtpclient correctamente?¿Desechar SmtpClient en SendComplete?

Digamos:


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); 

En el método SendAsyncCallback, debería llamar sc.Dispose(), o mail.Dispose()?

Comprobé el documento de MSDN, un ejemplo llama a MailMessage.Dispose(), pero ¿dispondrá este método también de la instancia SmtpClient?

Muchas gracias.

Respuesta

4

Debe disponer tanto de la MailMessage y el SmtpClient en SendAsyncCallback.

Disponer el MailMessage no va a disponer el SmtpClient automáticamente (porque es posible que desee enviar dos mensajes con el mismo SmtpClient, y que no desea que el cliente puede disponer tan pronto como se dispone el primer mensaje).

0

Este ejemplo: a partir de la documentación de MSDN sólo cierra el mensaje, así que voy con esto en mi aplicación: SmtpClient.SendAsync Method

message.Dispose(); 

yo estaba corriendo en este tema se hace referencia en esta pregunta dónde estaba el envío siempre se cancela, así que estoy eliminando el uso de la instrucción {}: SmtpClient.SendAsync Calls are Automatically Cancelled

Bien, acabo de intentar emitir el mensaje. Desechar() e incluso eso fue arrojar el error diciendo que no podía enviar el correo electrónico debido al mensaje siendo dispuesto Posiblemente porque la mía es una aplicación asp.net mvc y el ejemplo es una aplicación de consola. En cualquier caso, el recolector de basura debería elegir estas opciones una vez que todo se salga del alcance ...

Cuestiones relacionadas