2010-05-04 11 views
8

me di cuenta de que siempre simplemente somos como:¿Cómo mi aplicación ASP.NET obtiene la configuración SMTP automáticamente desde web.config?

SmtpClient mSmtpClient = new SmtpClient(); 
// Send the mail message 
mSmtpClient.Send(mMailMessage); 

Y el único lugar se establecen las credenciales están en web.config:

<system.net> 
    <mailSettings> 
     <smtp> 
     <network host="xxx.xx.xxx.229" userName="xxxxxxxx" password="xxxxxxxx"/> 
     </smtp> 
    </mailSettings> 
    </system.net> 

Así que mi pregunta es, ¿cómo conseguir que automagicamente ¿fuera?

+0

reflector es su amigo. – Steven

Respuesta

15

The documentation indica que el constructor sin parámetros de SmtpClient lee su configuración desde la aplicación o el archivo de configuración de la máquina. Para una aplicación web, el archivo de configuración de la aplicación es web.config. Esto también significa que si el elemento mailSettings no se establece en Web.config, se buscará ajustes en machine.config, antes de renunciar:

"Este constructor inicializa el anfitrión, Credenciales y propiedades del puerto de el nuevo SmtpClient usando la configuración en la aplicación o los archivos de configuración de la máquina . "

1

Hay un archivo machine.config en su carpeta de Windows, y cada sitio web (o aplicación) tiene un archivo web.config (o un archivo app.config). Estos archivos se combinan para obtener la configuración del dominio de la aplicación.

La clase smtp simplemente accede a la configuración, probablemente a través de la ConfigurationManager Class

2
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

Excelente responder Driis. Desearía tener suficiente reputación para actualizar tu respuesta, pero no lo hago :(

De todos modos, proporcioné una respuesta a algo similar, aunque se hace manualmente como muestra Abatishchev. La única diferencia es que resolví el problema con el enableSsl que no son atm accesible.

See article thread here.

Cuestiones relacionadas