在asp.net的c#代码中修改web.config中的SmtpSection?

时间:2013-12-29 13:28:15

标签: c# asp.net permissions web-config smtp

我在web.config中设置了以下内容,以定义多个smtp设置:

    <sectionGroup name="mailSettings">
      <section name="smtp_1" type="System.Net.Configuration.SmtpSection" requirePermission="false"/>
      <section name="smtp_2" type="System.Net.Configuration.SmtpSection" requirePermission="false"/>
    </sectionGroup>
  </configSections>
  <mailSettings>
    <smtp_1 deliveryMethod="Network" from="xxx@hotmail.com">
      <network host="smtp.live.com" port="587" userName="xxx@hotmail.com" password="xxx" defaultCredentials="false"/>
    </smtp_1>
    <smtp_2 deliveryMethod="Network" from="yyy@gmail.com">
      <network host="smtp.gmail.com" port="465" userName="yyy@gmail.com" password="yyy" defaultCredentials="false"/>
    </smtp_2>
  </mailSettings>

我已经能够使用代码检索任何设置,并且我已经设置了一个函数来遍历配置文件并提取每个smtp设置并添加到下拉列表中。

唯一不想工作的是实际写回web.config(添加新的smtp或修改现有的smtp)。我使用了以下C#代码:

    Configuration webConfig = WebConfigurationManager.OpenWebConfiguration("~");
    SmtpSection smtpSection = (SmtpSection)ConfigurationManager.GetSection("mailSettings/smtp_1");
    smtpSection.From = "zzz@hotmail.com";
    smtpSection.Network.Port = 25;
    smtpSection.Network.UserName = "xxx";
    smtpSection.Network.Password = "xxx";
    webConfig.Save();

但是这会返回错误: 配置为只读。

这段代码完全正常,但当然它修改了system.net中的主要smtp设置(你不能有多个smtp设置)。

    System.Net.Configuration.MailSettingsSectionGroup mailSection = webConfig.GetSectionGroup("system.net/mailSettings") as System.Net.Configuration.MailSettingsSectionGroup;
    mailSection.Smtp.From = "xxx@hotmail.com";
    mailSection.Smtp.Network.Host = "smtp.live.com";
    mailSection.Smtp.Network.Port = 25;
    webConfig.Save();

一直在绞尽脑汁,似乎无法找到答案。感觉它会变得如此简单(或者说不可能)。如果没有,可能需要加密设置并存储在数据库中。

谢谢! :)

0 个答案:

没有答案