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ファイルを作成しようとしましたが、次のようにするとメール設定が常に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リクエストオブジェクトをサービスクラスに渡す必要がありますか?それは悪い考えのようです。

4

1 に答える 1

9

使用するだけです:

SmtpClient SmtpServer = new SmtpClient();

このコンストラクターは、構成を直接選択します。

のパラメータなしコンストラクタのSmtpClientMSDNドキュメントは、次のように述べています。

このコンストラクターは、アプリケーションまたはマシン構成ファイルの設定を使用して、新しいSmtpClientのホスト、資格情報、およびポートのプロパティを初期化します。詳細については、「<mailSettings>要素(ネットワーク設定) 」を参照してください。

于 2013-03-14T19:40:53.870 に答える