Как мое приложение 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

Другие вопросы по тегам