如何在我的表格中的特定条件不符合时自动发送电子邮件

时间:2012-11-08 22:44:34

标签: asp.net sql-server-2008

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

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

第1步Configure component 'Database Mail XPs'

第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

您需要相应地修改此程序