4

我似乎被困住了。我有一个 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 请求对象传递给服务类?这似乎是个坏主意。

4

1 回答 1

9

只需使用:

SmtpClient SmtpServer = new SmtpClient();

此构造函数将直接选择配置。

正如无参数构造函数SmtpClient的 MSDN 文档所说:

此构造函数使用应用程序或机器配置文件中的设置初始化新 SmtpClient 的 Host、Credentials 和 Port 属性。有关详细信息,请参阅<mailSettings>元素(网络设置)

于 2013-03-14T19:40:53.870 回答