Подтвердить что ты не робот

Как читать system.net/mailSettings/smtp из Web.config

Это мои настройки почты web.config:

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="[email protected]">
        <network defaultCredentials="true" host="localhost" port="587" userName="[email protected]" password="123456"/>
      </smtp>
    </mailSettings>
  </system.net>

и вот как я пытаюсь прочитать значения из web.config

 var smtp = new System.Net.Mail.SmtpClient();
 var credential = new System.Net.Configuration.SmtpSection().Network;

 string strHost = smtp.Host;
 int port = smtp.Port;
 string strUserName = credential.UserName;
 string strFromPass = credential.Password;

Но учетные данные всегда равны нулю. Как я могу получить доступ к этим значениям?

4b9b3361

Ответ 1

Поскольку ответа не было принято, и никто из других не работал у меня:

using System.Configuration;
using System.Net.Configuration;
// snip...
var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
string username = smtpSection.Network.UserName;

Ответ 2

Нет необходимости использовать ConfigurationManager и получать значения вручную. Достаточно просто создать экземпляр SmtpClient.

SmtpClient client = new SmtpClient();

Вот что MSDN говорит:

Этот конструктор инициализирует свойства Host, Credentials и Port для нового SmtpClient, используя настройки в файлах конфигурации приложения или машины.

Скотт Гатри написал небольшую статью об этом некоторое время назад.

Ответ 3

Используя конфигурацию, следующая строка:

var smtp = new System.Net.Mail.SmtpClient();

Будет использовать сконфигурированные значения - вам не нужно будет снова обращаться и назначать их.


Что касается значений null - вы пытаетесь неправильно получить значения конфигурации. Вы просто создаете пустой SmtpSection вместо того, чтобы читать его из конфигурации.

var smtpSection = (SmtpSection)ConfigurationManager.GetSection("<the section name>");
var credentials == smtpSection.Network;

Ответ 4

Я думаю, что если у вас установлен defaultCredentials = "true", у вас будут учетные данные = null, поскольку вы их не используете.

Отправляется ли электронная почта при вызове метода .Send?

Итак,

Это мои настройки электронной почты в сети:

<system.net>
   <mailSettings>
      <smtp deliveryMethod="Network" from="[email protected]">
         <network defaultCredentials="false" host="localhost" port="587"
            userName="[email protected]" password="123456"/>
      </smtp>
   </mailSettings>
</system.net>

и это cs

SmtpClient smtpClient = new SmtpClient();

string smtpDetails =
    @"
    DeliveryMethod = {0},
    Host = {1},
    PickupDirectoryLocation = {2},
    Port = {3},
    TargetName = {4},
    UseDefaultCredentials = {5}";

Console.WriteLine(smtpDetails,
    smtpClient.DeliveryMethod.ToString(),
    smtpClient.Host,
    smtpClient.PickupDirectoryLocation == null
        ? "Not Set"
        : smtpClient.PickupDirectoryLocation.ToString(),
    smtpClient.Port,
    smtpClient.TargetName,
    smtpClient.UseDefaultCredentials.ToString)
);

Ответ 5

            //You can access the network credentials in the following way.
            //Read the SmtpClient section from the config file    
            var smtp = new System.Net.Mail.SmtpClient();
            //Cast the newtwork credentials in to the NetworkCredential class and use it .
            var credential = (System.Net.NetworkCredential)smtp.Credentials;
            string strHost = smtp.Host;
            int port = smtp.Port;
            string strUserName = credential.UserName;
            string strFromPass = credential.Password;

Ответ 6

убедитесь, что у вас есть ссылка на System.Net в вашем приложении

Ответ 7

Установить defaultCredentials = "false", потому что когда он установлен в true, учетные данные не используются.