0

我只需要一些关于如何实现这一目标的指导、信息或链接。我不确定我是否可以从 ASP 或某种存储过程中做到这一点。例如,这只是示例,我的表中有 2 个字段:TargetDate 状态

期望用户必须通过目标日期字段中设置的 TargetDate 更新状态字段,无论它是 Complete 还是 Incomplete。如果目标日期已过且状态字段未更新,那么我想向该人发送电子邮件。我只需要关于从哪里开始以及使用什么方法的帮助。提前致谢。

4

2 回答 2

0

我不确定 SQL Server 可以做什么(如果它可以做到,我不会感到惊讶)。

根据在发送电子邮件之前从 TargetDate 开始的时间,您可以在 Global.asax Application_Start 方法中编写一个方法来检查该方法并发送电子邮件。这取决于您的应用程序池的重置频率以及用户访问该站点的频率。

这确实具有将逻辑保留在应用程序中的优势,就像将业务逻辑移动到数据库一样(取决于程序的设计方式)。

这是我在类似情况下所做的一个示例:

全球.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 回答
0

您可以使用 SQL Server 执行此操作:

第 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 回答