Как мое приложение ASP.NET автоматически получает настройки SMTP из web.config? - PullRequest
11 голосов
/ 04 мая 2010

Я заметил, что мы всегда просто такие:

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 ]

17 голосов
/ 04 мая 2010

В документации указано, что конструктор без параметров SmtpClient считывает свою конфигурацию из файла конфигурации приложения или компьютера. Для веб-приложения файл конфигурации приложения - это web.config. Это также означает, что если элемент mailSettings не установлен в Web.config, он будет искать настройки в machine.config, прежде чем отказаться:

"Этот конструктор инициализирует Хост, Учетные данные и свойства порта для новый SmtpClient с помощью настройки в приложении или машине файлы конфигурации. "

2 голосов
/ 04 мая 2010
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;      
}
1 голос
/ 24 августа 2011

Отличный ответ, Дриис. Хотелось бы, чтобы у меня было достаточно репутации, чтобы переоценить ваш ответ, но я не знаю: (

Во всяком случае, я предоставил ответ на что-то подобное, хотя это делается вручную, как показывает Абатищев. Разница лишь в том, что я решил проблему с enableSsl, которые не доступны atm.

См. Тему статьи здесь .

1 голос
/ 04 мая 2010

В вашей папке Windows есть файл machine.config, и у каждого веб-сайта (или приложения) есть файл web.config (или файл app.config). Эти файлы объединяются для получения настроек для домена приложения.

Класс smtp просто обращается к конфигурации, возможно, через Класс ConfigurationManager

...