我的ASP.NET应用程序如何从web.config自动获取SMTP设置?

15

我注意到我们总是这样:

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

而且凭据(credentials)唯一被设置的地方就是在web.config中:

  <system.net>
    <mailSettings>
      <smtp>
        <network host="xxx.xx.xxx.229" userName="xxxxxxxx" password="xxxxxxxx"/>
      </smtp>
    </mailSettings>
  </system.net>
所以我的问题是,它如何自动地将它们取出来?
4个回答

20

文档指出,SmtpClient的无参构造函数会从应用程序或机器配置文件中读取配置。对于Web应用程序,应用程序配置文件是web.config。这也意味着,如果Web.config中没有设置mailSettings元素,它将在放弃前查找machine.config中的设置:

"这个构造函数通过使用应用程序或机器配置文件中的设置,为新的SmtpClient初始化Host、Credentials和Port属性。"


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

在你的Windows文件夹中有一个machine.config文件,而每个网站(或应用程序)都有一个web.config文件(或app.config文件)。这些文件合并以获取应用程序域的设置。

smtp类只是通过ConfigurationManager类访问配置。


1
非常好的答案Driis。我希望我有足够的声望来给你的答案点赞,但我没有:(
无论如何,我提供了一个类似的答案,尽管像Abatishchev所展示的那样是手动完成的。唯一的区别是我解决了目前不可访问的enableSsl问题。 在此处查看文章线程

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接