MVC4- 웹 사이트에서 사람들이 뭔가를하지 않았기 때문에 이메일로 경고를 받아야하는지 확인하려고합니다.MVC4에서 emaillist 비동기 처리
나는이 문제에 접근하는 방법을 찾는 데 어려움을 겪고 있습니다. 공유 호스팅 플랫폼에서 일종의 cronjob을 활성화 할 수 있는지 확인했지만 사용할 수 없습니다.
이제는 각 페이지 요청에 대해이 체크를 수행하는 것이 좋습니다. 오버 헤드 때문에 이미 차선책으로 보입니다. 하지만 비동기를 사용하면 사이트를 방문하는 사람들에게 방해가되지 않을 것이라고 생각했습니다.
먼저 Global.asax의 Application_BeginRequest 메서드에서이 작업을 시도했지만 페이지 요청 당 여러 번 호출되어 작동하지 않습니다.
다음으로 나는 OnResultExecuted에서 실행되는 글로벌 필터를 만들 수 있다는 것을 알았지 만 이는 유망한 것처럼 보였지만 여전히 문제가 아닙니다.
MVCMailer를 사용하여 메일을 보내고 실행할 때 오류가 발생합니다. { "값은 null 일 수 없습니다. \ r \ n 매개 변수 이름 : httpContext"} 이것은 아마도 메일러가 컨텍스트를 필요로 함을 의미합니다. 그렇다면
그래서public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
HandleEmptyProfileAlerts();
}
private void HandleEmptyProfileAlerts()
{
new Thread(() =>
{
bool active = false;
new UserMailer().AlertFirst("[email protected]").Send();
DB db = new DB();
DateTime CutoffDate = DateTime.Now.AddDays(-5);
var ProfilesToAlert = db.UserProfiles.Where(x => x.CreatedOn < CutoffDate && !x.ProfileActive && x.AlertsSent.Where(y => y.AlertType == "First").Count() == 0).ToList();
foreach (UserProfile up in ProfilesToAlert)
{
if (active)
{
new UserMailer().AlertFirst(up.UserName).Send();
up.AlertsSent.Add(new UserAlert { AlertType = "First", DateSent = DateTime.Now, UserProfileID = up.UserId });
}
else
System.Diagnostics.Debug.WriteLine(up.UserName);
}
db.SaveChanges();
}).Start();
}
내 질문에, 나는 이것에 대해 올바른 길을 가고, 그리고하고있다가, 어떻게 MVCMailer 가져 있는지 확인 할 수 있습니다
지금 내 글로벌 필터에서이 코드는이 다음이다 올바른 맥락?