SQL Serverで何ができるかわかりません(それができても驚かないでしょう)。
TargetDateから電子メールが送信されるまでの経過時間に応じて、Global.asax Application_Startメソッドにメソッドを記述して、メソッドを確認し、電子メールを送信できます。これは、アプリケーションプールがリセットされる頻度と、誰かがサイトにアクセスする頻度によって異なります。
これには、ビジネスロジックをデータベースに移動するのと同じように、アプリケーションにロジックを保持するという利点があります(プログラムの設計方法によって異なります)。
これは、私が同様の状況で行ったことの例です。
Global.asax
protected void Application_Start(object sender, EventArgs e)
{
using (var db = new DataContext())
{
//Get the last time e-mails where sent out.
var temp = from s in db.SystemDatas
select s;
if (temp.Count() > 0)
{
var ts = (TimeSpan)(DateTime.Today - temp.First().LastUpdate);
if ((DateTime.Today.DayOfWeek == DayOfWeek.Monday || DateTime.Today.DayOfWeek == DayOfWeek.Tuesday) && ts.Days > 5)
{
//Run President's Report
Thread PresidentReport = new Thread(new ThreadStart(RunPresidentReport));
PresidentReport.Start();
}
}
}
}
private void RunPresidentReport()
{
MailMessage oMsg = new MailMessage();
oMsg.From = new MailAddress("from@at.com");
oMsg.To.Add(new MailAddress("to@at.com"));
oMsg.Subject = "Website - President's Report for " + DateTime.Today.ToString("dd MMM yyyy");
var db = new DataContext();
DataLoadOptions dlo = new DataLoadOptions();
var members = from m in db.Members
where m.status == 1 //1 = active, 2=inactive
orderby m.lastName, m.firstName
select m;
var sb = new StringBuilder();
/** Code to generate body cut for simplicity **/
if (sb.Length > 0)
{
oMsg.Body = sb.ToString();
var emailClient = new SmtpClient();
emailClient.Send(oMsg);
var Data = from s in db.SystemDatas
select s;
if (Data.Count() > 0)
{
Data.First().LastUpdate = DateTime.Today;
db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
}
}
次に、SMTP設定をweb.configに配置します。
<configuration>
<system.net>
<mailSettings>
<smtp from="NO_REPLY@at.com">
<network host="localhost"/>
</smtp>
</mailSettings>
</system.net>
</configuration>