我似乎被困住了。我有一个 asp.net mvc 4 应用程序,我想从服务类发送电子邮件。服务类位于与解决方案中的 mvc 项目不同的 C# 库项目中。我想在从配置文件调用的单独文件中设置电子邮件配置。以下应该进入mvc项目的web.config还是在服务项目中创建一个app.config文件?
<system.net>
<mailSettings>
<smtp configSource="MailSettings.config" />
</mailSettings>
</system.net>
然后我将它放在一个名为 MailSettings.config 的单独文件中:
<smtp from="abc@email.com">
<network host="smtp.server.com" port="587" userName="abc@email.com" password="password" enableSsl="true" />
</smtp>
我尝试为服务项目创建一个仅包含 system.net 内容的 app.config 文件,但是当我尝试时邮件设置始终为空:
MailSettingsSectionGroup settings = (MailSettingsSectionGroup)ConfigurationManager.GetSection("system.net/mailSettings");
SmtpClient SmtpServer = new SmtpClient(settings.Smtp.Network.Host); //get null exception for settings.Smtp.Network.Host)
此外,我尝试在 app.config 文件中包含邮件设置,以排除 MailSettings.config 文件存在问题并且仍会生成空指针。
我尝试了一个从 web.config 文件访问它的示例,如下所示:
Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
MailSettingsSectionGroup mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;
在服务类中,虽然WebConfigurationManager
是脱离上下文的,但Request.ApplicationPath
. 因此,如果我必须从 web.config 文件中获取它,我是否必须将 http 请求对象传递给服务类?这似乎是个坏主意。