2010-05-04 59 views
8

我注意到,我們永遠只是像:我的ASP.NET應用程序如何從web.config中自動獲取SMTP設置?

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

憑據被設置的唯一的地方是在web.config中:

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

所以我的問題是,它是如何自動地得到他們出來嗎?

+0

反射器是你的朋友。 – Steven 2010-05-04 18:14:58

回答

15

The documentation指出SmtpClient的無參數構造函數從應用程序或機器配置文件中讀取其配置。對於Web應用程序,應用程序配置文件是web.config。這也意味着,如果mailSettings元素沒有在Web.config中設置,它會尋找在machine.config中的設置,放棄之前:

「這個構造函數初始化主機, 憑據和端口屬性 新的SmtpClient通過使用應用程序中的 設置或機器 配置文件。「

1

在Windows文件夾中有一個machine.config文件,每個網站(或應用程序)都有一個web.config文件(或一個app.config文件)。這些文件被組合起來以獲取應用程序域的設置。

在SMTP類簡單地訪問配置,則可能需要通過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

外觀極好回答Driis。我希望我有足夠的聲望來提高你的答案,但我不:(

無論如何,我提供了類似的東西的答案,雖然它是手動完成像Abatishchev節目。唯一的區別是,我解決了問題與enableSsl不可訪問atm

See article thread here

相關問題