전자 메일을 보내기 위해 SMTPClient를 둘러싼 고정 도우미 메서드가 있습니다.자격증 명 캐싱 문제
System.Net 네임 스페이스 개체가 찾는 기본 위치의 web.config ->에 SMTP 인증을 저장합니다.
SMTPClient가 암호를 사용하기 전에 암호 해독을 실행하고 싶기 때문에 자격 증명을 SMTPClient에 전달하고 있습니다.
제가 여기에서 마주 치게되는 문제는 - 암호를 한 번 실행하면 암호가 어떻게 든 캐시에 "해독 된"것으로 저장된다는 것입니다. 동일한 세션에서이 메서드를 두 번째 시도하면 오류가 발생합니다. 암호가 처음 실행될 때 이미 암호 해독 된 암호를 해독하려고하기 때문에 오류가 발생합니다. 어떤 아이디어? NetworkCredentials으로
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
Global.asax에서이 작업을 수행하는 방법에 대한 간단한 샘플을 보여줄 수 있습니까? 여전히 정적에서 사용할 수 있습니까? – user53885
SmtpClient 개체의 내부에서 자격 증명은 정적 속성을 통해 설정됩니다. 따라서 SmtpClient가 각 요청을 인스턴스화하더라도 자격 증명은 동일한 정적 개체를 사용하여 채워집니다. 이것은 모든 SmtpClient 인스턴스가 실제로 NetworkCredentials의 동일한 정적 인스턴스를 사용하고 있음을 의미합니다. 이 속성은 응용 프로그램의 전체 수명 동안 동일한 객체 참조를 유지합니다. – Mark