0

これを達成する方法についてのガイダンス、情報、またはリンクが必要です。ASPまたは何らかのストアドプロシージャからこれを実行できるかどうかはわかりません。たとえば、これは単なる例ですが、テーブルに 2 つのフィールドがあります。

期待されるのは、ステータス フィールドが完了か未完了かにかかわらず、ユーザーはターゲット日付フィールドに設定された TargetDate までにステータス フィールドを更新する必要があることです。目標日を過ぎてもステータス欄が更新されていない場合、その人にメールを送りたいです。どこから始めて、どの方法を使用するかについて、助けが必要です。前もって感謝します。

4

2 に答える 2

0

SQLServerを使用してそれを行うことができます。

手順1コンポーネント「データベースメールXP」を構成する

ステップ2:次のようなストアドプロシージャを作成します。

CREATE PROCEDURE MySP
AS

    IF NOT EXISTS(SELECT * FROM myTable WHERE myColumn = someValue)
    BEGIN

        DECLARE @Result INT
        EXEC 
        @Result =  msdb.dbo.sp_send_dbmail
        @RECIPIENTS     = 'EMAILADDRESS1,EMAILADDRESS2,EMAILADDRESSN',
        @SUBJECT        = 'Subject',
        @BODY           = 'Body',
        @BODY_FORMAT    = 'HTML'

        SELECT Result = @Result 
   END

それに応じてこの手順を変更する必要があります

于 2012-11-09T03:00:57.637 に答える
0

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>
于 2012-11-08T22:53:59.423 に答える