J'ai une méthode d'aide statique que j'emballe autour de SMTPClient pour envoyer un courrier électronique.Problème de mise en cache des informations d'identification
Je stocke l'authentification SMTP dans le fichier web.config -> à l'emplacement par défaut que les objets de l'espace de noms System.Net recherchent.
Je transmets les informations d'identification au client SMTP, car je souhaite exécuter le décryptage de mon mot de passe sur le mot de passe avant que le client SMTP n'utilise ce code.
Le problème que je rencontre ici est le suivant: lorsque je l'exécute une fois, le mot de passe est stocké quelque part comme "décrypté" dans le cache. Lorsque j'essaie d'exécuter cette méthode une seconde fois dans la même session, j'obtiens une erreur, car elle essaie de déchiffrer un mot de passe déjà déchiffré lors de la première exécution. Des idées?
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;
}
Merci. Pourquoi reste-t-il en mémoire si je l'utilise en statique? – user53885
Serait-il possible de me montrer un bref exemple de comment faire cela dans Global.asax? Tout en étant capable de l'utiliser à partir d'un statique? – user53885
Interne par rapport à l'objet SmtpClient, les informations d'identification sont définies via une propriété statique. Ainsi, bien que votre SmtpClient soit instancié à chaque requête, les informations d'identification sont remplies en utilisant le même objet statique. Cela signifie que toutes les instances de SmtpClient utilisent réellement la même instance statique de NetworkCredentials. Cette propriété conserve la même référence d'objet pour toute la durée de vie de l'application. – Mark