定期向用户发送电子邮件以进行密码更新

时间:2016-02-22 12:28:36

标签: asp.net asp.net-mvc datetime windows-services asp.net-identity

我有Identity创建的AspNetUser表。

如果他没有更新密码六个月,我想向相应的用户发送电子邮件。我必须在60天后发送邮件,之后每3天发送一次邮件。我正在使用.net framework 4.5.2,asp.net,mvc 5,identity2
我的模特

    public class IdentityUser : IUser
    {
        public IdentityUser();
        public IdentityUser(string userName);
        .
        .
        public DateTime LastUpdateDate{get;set;}
    }

我的控制器

public ActionResult PasswordSendMail()
{
    my code for checking six month...
}

但邮件必须在LastUpdateDate的第60天和每隔三天后发送一次。
如果我将代码放在控制器中,则应该调用该操作。我必须在没有专门致电任何控制器的情况下发送 我想向用户发送邮件,无论用户是否登录。当到达邮件的时间应该由后台程序发送 如何将windows service与当前项目集成。简要回答将有所帮助 提前致谢

5 个答案:

答案 0 :(得分:6)

这里有两个主要选项。第一个也是最简单的是不用担心在一定的时间间隔内准确地通知用户,并且只要有时间更改密码就可以在登录时通知他们。您只需添加代码即可检查密码是否早于登录代码的定义时间范围,然后将其重定向到密码更改表单(如果有的话)。或者,如果您真的想要了解它,可以创建一个动作过滤器来执行此检查并重定向到密码更改表单,这样用户在更新其密码之前将无法执行任何其他操作

如果您确实想按计划发送电子邮件,那么您需要能够按计划运行代码的内容。在这方面你有两个选择。首先,您可以创建一个包含此代码的控制台应用程序,然后只需使用Windows中的任务计划程序等操作即可按设定的计划运行它。其次,您可以使用Revalee之类的内容按计划调用您的操作。

答案 1 :(得分:1)

如果您想在服务器上安排操作,我建议创建一个带有计时器的Windows服务,该计时器在给定时刻调用URL。我尝试了任务调度程序,对我来说不够可靠。

这是Windows服务中最重要的部分

protected override void OnStart(string[] args)
        {
            LaunchTimer(MilliSecondsToNextLaunch());
        }

protected void LaunchTimer(double interval)
        {
            Timer = new Timer { Interval = interval };
            Timer.Elapsed += OnTimer;
            Timer.Start();
        }

protected override void OnTimer(object sender, ElapsedEventArgs args)
        {
            using (var client = new WebClient())
            {
                client.DownloadString(siteUrl);
            }
            SetIntervalForTimer(MilliSecondsToNextLaunch() + 1000);
        }

protected void SetIntervalForTimer(double nextInterval)
        {
            Timer.Stop();
            Timer.Interval = nextInterval;
            Timer.Start();
        }

答案 2 :(得分:0)

您可以使用SQL存储过程来完成此操作。通过添加新列LastUpdateDate来更改Identity表。

在存储过程中检查上次更新日期和当前日期之间的日期差异,将值存储在整数变量中,然后使用IF-ELSE语句检查更新值是否大于6个月。

如果为true,请选择这些用户的电子邮件地址。

现在阅读ASP.Net中的那些电子邮件地址并向这些用户发送电子邮件。

如果您可以向我发送您的身份表的架构,我可以帮助您使用代码。

如有任何进一步的帮助,请随时联系。

答案 3 :(得分:0)

我们已经为此要求开发了解决方案。

  1. 在asp.net或mvc网站上,添加一个webservice作为发送密码的界面

  2. 开发一个基本的控制台程序,在步骤#1中添加服务引用,执行服务api以发送电子邮件

  3. 如果使用Windows服务:

    1. 使用NSSM将控制台程序注册为Windows服务
    2. 添加调度程序任务以在步骤#3中启动/停止控制台程序的服务。 http://forums.asp.net/t/1758972.aspx?start+and+stop+windows+service+using+windows+task+scheduler
    3. 但Windows服务,imo,没有必要。在我们的例子中,我们只使用Windows任务调度程序来启动控制台程序,然后控制台程序将调用webservice并发送电子邮件

答案 4 :(得分:0)

检查此解决方案将解决您的问题