2010-05-04 57 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

相关问题