行き詰まっているようです。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ファイルを作成しようとしましたが、次のようにするとメール設定が常にnullになります。
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ファイルが問題になることを除外しようとしましたが、それでもnullポインターが生成されます。
次のように、web.configファイルからアクセスする例を試しました。
Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
MailSettingsSectionGroup mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;
サービスクラスでは、WebConfigurationManager
はコンテキスト外であり、も同様ですRequest.ApplicationPath
。したがって、web.configファイルから取得する必要がある場合、httpリクエストオブジェクトをサービスクラスに渡す必要がありますか?それは悪い考えのようです。