2011-07-06 33 views
1

電子メールを送信する必要があるアプリケーションがあります。しかし今、私たちはそれらを送る正しい方法について議論します。私たちのアプリケーションはN層アーキテクチャを実装しています。プロセスでは、プレゼンテーション層がビジネスロジック層のパブリッシュメソッドを呼び出します。公開が成功した後、多数のユーザーに電子メールで通知する必要があります。Asp.net電子メール送信プロセス

この時点で、ビジネスロジックレイヤーがこのジョブまたはプレゼンテーションレイヤーを実行する責任があるかどうかを議論します。ビジネス層が電子メールを送信する必要がある場合は、プレゼンテーション層の電子メールテンプレートまたはジョブを作成することが自分の仕事です。論理層は単なるクラスライブラリであり、htmlを抽出するために何らかのasp.netページを呼び出すことはできません。また、一部の電子メールテンプレートのコンテンツは動的です。

Windowsサービスを実装してデータベースから読み込んで、コンテンツとともに送信する必要がある電子メールを抽出するとよいでしょうか?

この時点で、メール送信プロセスを実装するための適切で洗練された方法は何かについてはわかりません。我々はこれに答えるためにインターネット上で多くの検索を行いますが、成功はありません。

あなたの意見や経験をこのケースで教えてもらえますか?

答えて

2

それはデータベースから読み込まれ、彼のコンテンツに送る ことの必要性を持っている エキスの電子メールには、Windows サービスを実装するためには良いですか?

によって異なります。コアロジックがミッションクリティカルで、アプリケーションが電子メールサーバーと通信している間に実行を遅延させたくない場合は、責任を何らかのサービスに委任することができます。

これは、プレゼンテーション層にこのジョブまたは を行うには ビジネスロジック層への責任である場合。 ビジネス層がメールを送信する必要がある場合 メール テンプレートまたは プレゼンテーション層のジョブを作成するのは彼の仕事です。

あなたは同じプロセスで(win-serviceに委任せずに)それを行うことに決めましたが、ビジネスロジックレイヤーで行うことをお勧めします。このようにして、このロジックを他のアプリケーション/コンポーネントで再利用することは、面倒(再利用性)を伴わずに可能になります。

ロジック層は だけのクラスライブラリであり、それは HTMLを抽出するためのasp.netページの いくつかの種類を呼び出しcan`t。

DB-Tableを使用して電子メールテンプレートを保存できるため、UIにアクセスしてテンプレートを取得する必要はありません。

[更新]電子メールはHTMLです。デザイナーの助けを借りて、見栄えの良いHTMLを作成し、それをdbのテンプレートとして保存することができます。動的(ヘッダ、本文など)のフィールドの場合は、特別なタグ({head}、{body})を配置し、実際のものを使用してビジネスロジック内に置き換えることができます。

+0

他のアプリケーションでこのロジックを再利用する場合は、ビジネスロジックレイヤーに残しておきます。あなたは電子メールテンプレートのために何を提案していますか?プレゼンテーションレイヤーに基づいたアプリケーション間で、電子メールテンプレートのスタイリングが異なる場合がありますか? – sebascomeau

+0

私はこの質問に答えて答えを更新しました。見て。 – Illuminati

+0

丁寧な答えですが、このアプローチとMailDefinitionオブジェクトの使用について考えました。 – sebascomeau

0

論理の一部として電子メールを受け取る人を決定することを検討するので、通常はビジネスロジック層にこれを処理させます。その後、通常、ビジネス層にメッセージを作成して受信者を決定させ、すべてのメッセージをThreadPoolにキューイングするか、電子メールを非同期で送信する別の方法でキューに入れます。

私が避けることの1つは、ビジネスロジックからのSmtpClient.SendAsyncのプレーンコールです。私が実行した問題は、SendAsyncが短期間に何回も呼び出されると、交換する電子メールサーバーの同時接続数に問題が発生することです。だから私の場合、私たちの交換サーバーは最大50の同時接続を持っていますが、バッチジョブで300の電子メールを送信する必要がある場合は、50を超えて同時に送信しないようにキューに入れる必要があります。これにはThreadPoolがうまく機能します。

+0

OK良いですが、私は非同期的にメールの送信をチェックします。 – sebascomeau

関連する問題