read networkcredential net mail from app c# web-config smtp sendmail

c# - mail - system net networkcredential web config



Cómo leer system.net/mailSettings/smtp desde Web.config (7)

Al usar la configuración, la siguiente línea:

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

Utilizará los valores configurados; no necesita acceder y asignarlos nuevamente.

En cuanto a los valores null , está intentando acceder a los valores de configuración incorrectamente. Simplemente está creando un SmtpSection vacío en lugar de leerlo desde la configuración.

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

Esta es mi configuración de correo 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>

y así es como trato de leer los valores de 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;

Pero las credenciales siempre son nulas. ¿Cómo puedo acceder a estos valores?


Creo que si tiene defaultCredentials = "true" set, tendrá las credenciales = null ya que no las está usando.

¿El correo electrónico se envía cuando llamas al método .Send?

Asi que

Esta es mi configuración de correo de configuración web:

<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>

y esto es 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) );


Dado que ninguna respuesta ha sido aceptada, y ninguno de los otros funcionó para mí:

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


Establezca defaultCredentials = "false", porque cuando se establece en verdadero, no se utilizan credenciales.


No es necesario usar el ConfigurationManager y obtener los valores manualmente. Simplemente crear instancias de un SmtpClient es suficiente.

SmtpClient client = new SmtpClient();

Esto es lo que dice MSDN :

Este constructor inicializa las propiedades de host, credenciales y puerto para el nuevo SmtpClient utilizando la configuración en la aplicación o en los archivos de configuración de la máquina.

Scott Guthrie escribió una pequeña post sobre eso hace algún tiempo.


asegúrese de tener referencia a System.Net en su aplicación


//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;