2011-10-29 3 views
1

私はasp.netのメインアプリケーションを持っています。 SMTP経由でメールを送信するオプションがあります。私は別のメール送信プロセスを作りたい。つまり、SEND MAILボタンをクリックすると、メールはアプリケーションに影響を与えずにバックグラウンドから送信されます(別のサービスのように)。私はの別スレッドを使ってみましたが、メインアプリケーションに影響を与えずに別のメール送信プロセスを作る可能性はあります。アプリケーション(アプリケーションプール)を閉じると、メールを送信する必要があります。asp.netのメインアプリケーションとは別のサービスを作成する方法

ありがとうございました。

+0

非同期操作は、あなたの問題への答えかもしれません.. –

+0

これはASP.NETアプリケーションですか?もしそうなら、**アプリケーションをどのように閉じるのですか?**つまり、IISをリセットするか、アプリケーションプールが突然リセットされると、どちらもlooongショットのように聞こえます。あなたのアプリの閉鎖について心配する必要はありますか? ? –

+0

返信いただきありがとうございます。これはSMTP非同期でメールを送信することを意味します –

答えて

3

メール送信ロジックをWindowsサービスとして実装し、ASP.NETアプリケーションとWindowsサービス間の通信にIPC(MutexやMemoryMappedFile経由の共有メモリなど)を使用します。

これは、マシンが稼動している限りメールの送信ロジックが実行されるという利点があります。永続性が必要な場合(たとえば再起動後に未送信メッセージを覚えておくなど)、DBやファイルシステムを使用できます。

EDIT - はるかに簡単オプション:

セットアップIISでSMTPピックアップフォルダ(!それは、このオプションが組み込まれている)と(例http://www.singular.co.nz/blog/archive/2007/11/28/using-an-smtp-pickup-directory-delivery-method-for-asp-net-development.aspxhttp://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspxを参照)に応じて、あなたのASP.NETアプリケーションを構成します。

この方法で、メールは.emlというファイルに保存され、IISは残りの部分(送信/再送信/ログなど)を処理します。 SmtpClientには、既に内蔵されているピックアップフォルダを操作する機能があります!

1

はい、Windowsサービスを作成できます。
ソリューションエクスプローラでソリューションを右クリックし、新しいプロジェクトを選択します。ダイアログで
、選択した「ビジュアルC# - >のWindows-> Windowsサービス」を

編集1
あなたのメールは、データベースに送信時にメールを保存することができます特定の時間に送られるべきである場合定期的に(1分に1回)データベースをポーリングするようにしてください。
すぐにメールを送信する場合は、MSMQを使用してアプリケーションからサービスにメールを転送できます。

編集2
サービスに関する補足として。 Visual Studioからは起動できないため、通常のアプリケーションと同じようにデバッグするのは簡単ではありません。私は通常、クラスライブラリとしてWindowsサービスの実際の関数を作成します。次に、2つのプロジェクトを作成します。まず、本番で使用するクラスライブラリを使用するサービスを最終テストします。次に、開発とデバッグに使用するのと同じライブラリを使用するコンソールアプリケーションを作成します。そうすれば、サービスをインストールしてデバッガで実行するたびにデバッガをアタッチすることなく、簡単にサービスを構築してテストすることができます。

関連する問題