Я заметил, что мы всегда просто похожи:
SmtpClient mSmtpClient = new SmtpClient();
// Send the mail message
mSmtpClient.Send(mMailMessage);
И единственное место, учетные данные установлены, находится в web.config:
<system.net>
<mailSettings>
<smtp>
<network host="xxx.xx.xxx.229" userName="xxxxxxxx" password="xxxxxxxx"/>
</smtp>
</mailSettings>
</system.net>
Таким образом, мой вопрос, как он автоволшебно выводит их?
В документации говорится, что конструктор SmtpClient без параметров считывает свою конфигурацию из файла конфигурации приложения или машины. Для веб-приложения конфигурационным файлом приложения является web.config. Это также означает, что если элемент mailSettings не установлен в Web.config, он будет искать настройки в machine.config, прежде чем сдаться:
"Этот конструктор инициализирует Host, Учетные данные и порт для нового SmtpClient, используя настройки в приложении или машинном конфигурационных файлах."
В вашей папке Windows есть файл machine.config, и каждый веб-сайт (или приложение) имеет файл web.config (или app.config файл). Эти файлы объединяются, чтобы получить настройки для домена приложения.
Класс smtp просто обращается к конфигурации, вероятно, через ConfigurationManager Class
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;
}