我有一個靜態輔助方法,可以繞過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