2010-05-04 11 views
8

ho notato che abbiamo sempre e solo siamo come:In che modo la mia app ASP.NET ottiene automaticamente le impostazioni SMTP da web.config?

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

e l'unico posto sono impostate le credenziali sono in web.config:

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

Quindi la mia domanda è, come ci si automagically farli su?

+0

riflettore è tuo amico. – Steven

risposta

15

The documentation indica che il costruttore senza parametri di SmtpClient legge la sua configurazione dall'applicazione o dal file di configurazione della macchina. Per un'applicazione Web, il file di configurazione dell'applicazione è web.config. Questo significa anche che se l'elemento mailSettings non è impostato nel web.config, cercherà impostazioni in machine.config, prima di arrendersi:

"Questo costruttore inizializza l'Ostia, credenziali, e le proprietà della porta per il nuovo SmtpClient utilizzando le impostazioni nei file di configurazione dell'applicazione o della macchina ".

1

C'è un file machine.config nella cartella di Windows e ogni sito Web (o applicazione) ha un file web.config (o un file app.config). Questi file sono combinati per ottenere le impostazioni per il dominio dell'app.

La classe smtp accede semplicemente la configurazione, probabilmente attraverso il 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

Excelent rispondere Driis. Vorrei avere abbastanza reputazione per aumentare la risposta, ma non :(

In ogni caso, ho fornito una risposta a qualcosa di simile, anche se è fatto manualmente come mostra Abatishchev. L'unica differenza è che ho risolto il problema con enableSsl che non sono accessibili atm.

See article thread here.

Problemi correlati