0

我有一个要求,即应该经常(仍有待确定)通知某个电子邮件分发列表关于即将到期的用户帐户。

我想知道实现这一点的最佳方法,我知道在 asp.net 中生成另一个线程来处理这种类型的事情通常是一个坏主意,所以我在想也许一个简单的服务是可行的方法,但是为了某些东西这么小,这似乎有点矫枉过正。

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

我还建议在网站上设置一个包含此类信息的页面,但可能要过几天才能检查。我们也不能让用户延长他们自己的有效期。

有没有其他可行的选择。

4

2 回答 2

0

最合适的工作方法是

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

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

此应用程序将根据标准获取所有记录,并使用基本 HTML 模板将电子邮件发送给您的所有人。发送电子邮件后,您将更新notificationFlag数据库中的一列 ( ),就1好像您在过去 10 天内发送过一次一样。否则默认情况下它将是0

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

于 2012-05-17T05:13:41.917 回答
0

这是我所做的,类似于 Prescott 对您的回答的评论。

我有一个带有管理页面的网站,该页面报告了一堆到期日期。此页面还接受 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());
        }
    }
}
于 2012-05-17T05:16:49.313 回答