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;