我在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();
一直在绞尽脑汁,似乎无法找到答案。感觉它会变得如此简单(或者说不可能)。如果没有,可能需要加密设置并存储在数据库中。
谢谢! :)