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

Sent Email at regular Interval to user for Password updation

我有一个 table 由 Identity 创建为 AspNetUser

如果他六个月没有更新密码,我想给相应的用户发送一封电子邮件。我必须在 60 天后以及之后每 3 天发送一次邮件。我正在使用 .net 框架 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 与当前项目集成。简短的回答会有帮助
提前致谢

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

如果您真的想按计划发送电子邮件,那么您需要一些可以 运行 按计划发送代码的东西。在这方面你有两个选择。首先,您可以创建一个包含此代码的控制台应用程序,然后根据设定的时间表简单地使用 Windows 到 运行 中的 Task Scheduler 之类的东西。其次,您可以使用 Revalee 之类的东西按计划调用您的操作。

如果您想在您的服务器上安排操作,我建议您创建一个 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();
        }

您可以使用 SQL 存储过程来完成。通过添加新列 LastUpdateDate 来更改您的身份 table。

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

如果为真 select 这些用户的电子邮件地址。

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

如果您可以将您的身份架构发送给我 table,我可以帮助您处理代码。

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

我们已经为这个需求开发了解决方案。

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

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

如果使用 windows 服务:

  1. 使用 NSSM
  2. 将控制台程序注册为 windows 服务
  3. 在第 3 步中将调度程序任务添加到 start/stop 控制台程序的服务。 http://forums.asp.net/t/1758972.aspx?start+and+stop+windows+service+using+windows+task+scheduler

但是 windows 服务,imo,不是必需的。在我们的例子中,我们只是使用 windows 任务调度程序来启动控制台程序,然后控制台程序将调用网络服务并发送电子邮件

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

  • 在 Visual C# 中创建控制台应用程序编写您的自定义逻辑来检查您的验证。