1

私はMVC .Net Web アプリケーションに取り組んでいます。Tasks というテーブルがあるデータベースがあります。すべてのタスクは 1 人のユーザーに関連付けられており、すべてのタスクには遅延があります。タスクが関連付けられているユーザーに、有効期限の 2 日前 (たとえば) に電子メールを自動的に送信したいと考えています。

4

3 に答える 3

1

Windows サービス アプリケーションまたは Windows スケジューラを使用して定期的に (たとえば 1 日 1 回) 実行するようにスケジュールされるコンソール アプリケーションを作成すると、データベースにクエリが実行され、必要な条件に一致するレコードが抽出され、SmtpClientが実行されます。 .

私がこれを言っている理由は、このタスクが Web アプリケーションによって実行されるべきではないからです。別のアプリケーションで実行する必要があります。実行する必要があるようなバックグラウンド タスクを繰り返し実行することは、Web アプリケーションでは禁止されています。Haacked は、これが非常に悪い考えである理由について説明しました

于 2012-07-27T08:22:51.697 に答える
1

Windows サービスを使用して、電子メールを自動的に送信できます。

以下のリンクを参照してください

http://www.dotnetfunda.com/articles/article931-how-to-send-mail-automatically-for-every-five-minutes-using-csharp.aspx

ロジックで 2 日間のタイマーを設定できます。

于 2012-07-27T08:25:05.937 に答える
0

小さなモックアップの例:

DateTime today = DateTime.Now;
TimeSpan diff = user.Tasks.ExpirationDate.Subtract(today);
int dateDiff = Convert.ToInt32(diff.TotalDays);

if (dateDiff == 2)
{
     //Send Email
}

次に、これをServices/Emailmvcアプリのフォルダーに配置し、別のコンソールアプリを作成して毎日ページをリクエストし、クエリを実行します。例:

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create("YOUR PAGE");
        string response = new System.IO.StreamReader(req.GetResponse()
            .GetResponseStream()).ReadToEnd();

Windowsタスクスケジューラを使用して、コンソールアプリを毎日実行し、コンソールアプリを起動します>コンソールアプリのリクエストページ>ページはタスクの有効期限をチェックします>メールを送信します

于 2012-07-27T08:37:11.367 に答える