Comment mon application ASP.NET obtient-elle les parameters SMTP automatiquement à partir de web.config?

J’ai remarqué que nous sums toujours comme:

SmtpClient mSmtpClient = new SmtpClient(); // Send the mail message mSmtpClient.Send(mMailMessage); 

Et le seul endroit où les identifiants sont définis est dans web.config:

         

Ma question est donc la suivante: comment le fait-il automatiquement?

La documentation indique que le constructeur sans paramètre de SmtpClient lit sa configuration à partir du fichier de configuration de l’application ou de la machine. Pour une application Web, le fichier de configuration de l’application est web.config. Cela signifie également que si l’élément mailSettings n’est pas défini dans Web.config, il recherchera les parameters dans machine.config avant d’abandonner:

“Ce constructeur initialise les propriétés d’hôte, d’informations d’identification et de port pour le nouveau SmtpClient à l’aide des parameters des fichiers de configuration de l’application ou de la machine.”

 var config = WebConfigurationManager.OpenWebConfiguration("Web.config"); var settings= config.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; if (settings!= null) { var port = settings.Smtp.Network.Port; var host = settings.Smtp.Network.Host; var username = settings.Smtp.Network.UserName; var password = settings.Smtp.Network.Password; } 

Votre dossier Windows contient un fichier machine.config et chaque site Web (ou application) contient un fichier web.config (ou un fichier app.config). Ces fichiers sont combinés pour obtenir les parameters du domaine d’application.

La classe smtp accède simplement à la configuration, probablement via la classe ConfigurationManager

Excelent réponse Driis. Je voudrais avoir assez de réputation pour améliorer votre réponse, mais je n’ai pas 🙁

Quoi qu’il en soit, j’ai fourni une réponse à quelque chose de similaire, bien que cela se fasse manuellement, comme le montre Abatishchev. La seule différence est que j’ai résolu le problème avec le enableSsl qui ne sont pas accessibles à l’atmosphère.

Voir le fil de l’article ici .