valid - summary returns c#
La inspección del código dice que necesito desechar el objeto. ¿Cúal? (1)
Esta es mi función. Ya envolví el cliente y el mensaje en una cláusula de uso y aún obtengo un error al ejecutar la inspección de código. El error apunta a la primera línea usando:
public static void Send(MailItem mail)
{
var sender = Membership.GetUser(mail.CreatedBy);
if (sender == null)
{
return;
}
using (var msg = new MailMessage { From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]) })
{
foreach (var recipient in mail.MailRecipients)
{
var recipientX = Membership.GetUser(recipient.UserKey);
if (recipientX == null)
{
continue;
}
msg.To.Add(new MailAddress(recipientX.Email, recipientX.UserName));
}
msg.Subject = "[From: " + sender.UserName + "]" + mail.Subject;
msg.Body = mail.Body;
if (HttpContext.Current != null)
{
msg.Body += Environment.NewLine + Environment.NewLine + "To reply via Web click link below:" +
Environment.NewLine;
msg.Body += ConfigurationManager.AppSettings["MailPagePath"] + "?AID=" +
ContextManager.CurrentAccount.AccountId + "&RUN=" + sender.UserName;
}
try
{
using (var emailClient = new SmtpClient())
{
emailClient.Send(msg);
}
}
catch (Exception ex)
{
Logger.LogException(ex);
}
}
}
Esta es la advertencia que recibo:
Advertencia 1 CA2000: Microsoft.Reliability: En el método ''Email.Send (MailItem)'', el objeto ''<> g_ initLocal0'' no se encuentra en todas las rutas de excepción. Llame a System.IDisposable.Dispose en el objeto ''<> g _initLocal0'' antes de que todas las referencias a él estén fuera de alcance. C: / CodeWorkspace / Code / Utility / Email.cs 41
Su problema es esta línea:
using (var msg = new MailMessage { From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]) })
El bloque de inicialización { From = ... }
se ejecuta después de que se construye el objeto y antes de que comience try/finally
using
bloque interno.
Si el constructor MailAddress
(o sus expresiones de argumento, o la asignación a From
si es un acceso a la propiedad) lanza una excepción, el MailMessage
no se eliminará.
Cambiar a:
using (var msg = new MailMessage())
{
msg.From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]);
...
}
La variable temporal <>g_initLocal0
es el nombre del MailMessage antes de que se asigne a msg
.