Как мое приложение ASP.NET автоматически получает настройки SMTP из web.config?
Я заметил, что мы всегда просто такие:
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>
Итак, мой вопрос, как он автоматически получает их?
4 ответа
В документации говорится, что конструктор без параметров SmtpClient считывает свою конфигурацию из файла конфигурации приложения или компьютера. Для веб-приложения файл конфигурации приложения - это web.config. Это также означает, что если элемент mailSettings не установлен в Web.config, он будет искать настройки в machine.config, прежде чем отказаться:
"Этот конструктор инициализирует свойства Host, Credentials и Port для нового SmtpClient, используя параметры в файлах конфигурации приложения или компьютера".
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;
}
Отличный ответ, Дриис. Я хотел бы иметь достаточно репутации, чтобы переоценить ваш ответ, но я не:(
Во всяком случае, я дал ответ на что-то похожее, хотя это делается вручную, как показывает Абатищев. Разница лишь в том, что я решил проблему с enableSsl, которые не доступны atm.
В папке Windows есть файл machine.config, и у каждого веб-сайта (или приложения) есть файл web.config (или файл app.config). Эти файлы объединяются, чтобы получить настройки для домена приложения.
Класс smtp просто обращается к конфигурации, возможно, через класс ConfigurationManager