VS 2010 de análisis de código informa de lo siguiente:C# cómo desechar correctamente un SmtpClient?
Advertencia 4 CA2000: Microsoft.Reliability: En el método de 'Mailer.SendMessage()', objeto 'cliente' no está dispuesto a lo largo de todos los caminos de excepción. Call System.IDisposable.Dispose en el objeto 'client' antes de que todas las referencias estén fuera del alcance.
Mi código es:
public void SendMessage()
{
SmtpClient client = new SmtpClient();
client.Send(Message);
client.Dispose();
DisposeAttachments();
}
¿Cómo debo desechar correctamente cliente?
Actualización: a responder a la pregunta Jons, aquí está el adjuntos funcionalidad disponer:
private void DisposeAttachments()
{
foreach (Attachment attachment in Message.Attachments)
{
attachment.Dispose();
}
Message.Attachments.Dispose();
Message = null;
}
Última actualización lista de clases completo (su corta)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
public class Mailer
{
public MailMessage Message
{
get;
set;
}
public Mailer(MailMessage message)
{
this.Message = message;
}
public void SendMessage()
{
using (SmtpClient client = new SmtpClient())
{
client.Send(Message);
}
DisposeAttachments();
}
private void DisposeAttachments()
{
foreach (Attachment attachment in Message.Attachments)
{
attachment.Dispose();
}
Message.Attachments.Dispose();
Message = null;
}
}
@JL - en lugar de deshacerse de los archivos adjuntos manualmente, debe deshacerse del mensaje de correo que dispone de archivos adjuntos, vistas alternativas y otras piezas. – Giorgi
Verdadero pero en versión heredada (pre .net 4.0) SmtpClient no implementó un método de eliminación –