asp.net会员资格,当帐户即将到期时通知管理员

时间:2012-05-17 05:04:13

标签: asp.net asp.net-membership

我要求每隔一段时间(仍有待确定)通知某个电子邮件分发列表有关即将到期的用户帐户。

我想知道实现这一目标的最佳方法,我知道在asp.net中生成另一个线程以处理这类事情通常是一个坏主意,所以我想也许一个简单的服务是要走的路但是对于那么小的东西,这似乎有些过度。

理想情况下,我想要一些不需要太多保姆的东西(例如检查服务正在运行)。

我还建议在网站上有一个包含此类信息的页面,但很可能在检查之前几天。我们也不能让用户延长他们自己的到期日期。

还有其他可行的选择。

2 个答案:

答案 0 :(得分:0)

最合适的方法是

创建一个应用程序,根据您的要求,选择帐户到期日期在附近的所有用户的列表(例如,从今天起10天)。

此应用程序将被安排为每日执行(您将创建一个带有日志文件的exe,以显示引发的错误和一次执行中发送的电子邮件总数。)

此应用程序将根据条件获取所有记录,并使用基本HTML模板将电子邮件发送给您的所有记录。发送电子邮件后,如果您在过去10天内发送了一次,则会将数据库中的列notificationFlag更新为1。否则默认为0

您可以在每天上午12:10(当时只是让您的数据库服务器和网络服务器不及时匹配)安排exe。

答案 1 :(得分:0)

这是我所做的事情,类似于普雷斯科特对你答案的评论。

我的网站上有一个管理页面,报告了一堆到期日期。 此页面还接受QueryString参数SEND_EMAILS,因此,只要网站的管理用户传递了QueryString参数SEND_EMAILS = true,就会向所有即将过期的用户发送一堆电子邮件。

然后我添加了一个每日运行的Windows计划任务,并使用SEND_EMAILS = true参数加载页面。

这是我用来在计划任务中从控制台发出webrequest的简单代码:

namespace CmdLoadWebsite
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://default/site/";
            if (args.Length > 0)
            {
                url = args[0];
            }
            Console.WriteLine(GetWebResult(url));
        }

        public static string GetWebResult(string url)
        {
            byte[] buff = new byte[8192];            
            StringBuilder sb = new StringBuilder(); 

            HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();
            Stream webStream = response.GetResponseStream();

            int count = 0;
            string webString;

            do
            {
                count = webStream.Read(buff, 0, buff.Length);
                if (count != 0)
                {
                    webString = Encoding.ASCII.GetString(buff, 0, count);
                    sb.Append(webString);
                }
            }
            while (count > 0);

            return(sb.ToString());
        }
    }
}