Как читать 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;
Но учетные данные всегда равны нулю. Как я могу получить доступ к этим значениям?
Ответы
Ответ 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, учетные данные не используются.