我只需要一些关于如何实现这一目标的指导,信息或链接。我不确定我是否可以从ASP或某种存储过程中执行此操作。例如,这只是示例,我的表中有2个字段: 目标日期 状态
期望用户必须更新状态字段,无论目标日期字段中设置的TargetDate是完整还是不完整。如果目标日期已通过且状态字段未更新,那么我想向该人发送电子邮件。我只是需要帮助,从这里开始和使用什么方法。提前谢谢。
答案 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
您需要相应地修改此程序。