私はMVC .Net Web アプリケーションに取り組んでいます。Tasks というテーブルがあるデータベースがあります。すべてのタスクは 1 人のユーザーに関連付けられており、すべてのタスクには遅延があります。タスクが関連付けられているユーザーに、有効期限の 2 日前 (たとえば) に電子メールを自動的に送信したいと考えています。
3 に答える
Windows サービス アプリケーションまたは Windows スケジューラを使用して定期的に (たとえば 1 日 1 回) 実行するようにスケジュールされるコンソール アプリケーションを作成すると、データベースにクエリが実行され、必要な条件に一致するレコードが抽出され、SmtpClientが実行されます。 .
私がこれを言っている理由は、このタスクが Web アプリケーションによって実行されるべきではないからです。別のアプリケーションで実行する必要があります。実行する必要があるようなバックグラウンド タスクを繰り返し実行することは、Web アプリケーションでは禁止されています。Haacked は、これが非常に悪い考えである理由について説明しました。
Windows サービスを使用して、電子メールを自動的に送信できます。
以下のリンクを参照してください
ロジックで 2 日間のタイマーを設定できます。
小さなモックアップの例:
DateTime today = DateTime.Now;
TimeSpan diff = user.Tasks.ExpirationDate.Subtract(today);
int dateDiff = Convert.ToInt32(diff.TotalDays);
if (dateDiff == 2)
{
//Send Email
}
次に、これをServices/Email
mvcアプリのフォルダーに配置し、別のコンソールアプリを作成して毎日ページをリクエストし、クエリを実行します。例:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("YOUR PAGE");
string response = new System.IO.StreamReader(req.GetResponse()
.GetResponseStream()).ReadToEnd();
Windowsタスクスケジューラを使用して、コンソールアプリを毎日実行し、コンソールアプリを起動します>コンソールアプリのリクエストページ>ページはタスクの有効期限をチェックします>メールを送信します