我有一个静态辅助方法,可以绕过SMTPClient发送电子邮件。凭证缓存问题
我将SMTP认证存储在web.config - > System.Net命名空间对象查找的默认位置。
我将凭据传递给SMTPClient,因为我想在SMTPClient使用此密码之前在密码上运行我的密码解密。
我在这里遇到的问题是 - 当我运行一次这个密码时,密码在缓存中以某种方式被“解密”。当我在同一个会话中第二次尝试运行此方法时,出现错误,因为它试图解密第一次运行时已解密的密码。有任何想法吗?
public static void SendEmail(MailMessage mailMessage)
{
SmtpClient smtpClient = new SmtpClient();
NetworkCredential nc = new NetworkCredential();
nc = (NetworkCredential)smtpClient.Credentials;
nc.Password = Tools.Decrypt(nc.Password);
smtpClient.Credentials = nc;
smtpClient.Send(mailMessage);
nc = null;
smtpClient.Credentials = null;
}
谢谢。如果我在静态中使用它,为什么它会留在内存中? – user53885 2010-01-18 14:56:29
有没有可能向我展示如何在Global.asax中执行此操作的简短示例?虽然仍然能够从静态使用它? – user53885 2010-01-18 15:12:44
在SmtpClient对象的内部,通过静态属性设置凭证。因此,尽管您的SmtpClient已实例化,但每个请求凭证都使用相同的静态对象进行填充。 这意味着所有SmtpClient实例实际上都使用NetworkCredentials的相同静态实例。该属性在应用程序的整个生命周期中保持相同的对象引用。 – Mark 2010-01-18 15:23:32