我有一个要求,即应该经常(仍有待确定)通知某个电子邮件分发列表关于即将到期的用户帐户。
我想知道实现这一点的最佳方法,我知道在 asp.net 中生成另一个线程来处理这种类型的事情通常是一个坏主意,所以我在想也许一个简单的服务是可行的方法,但是为了某些东西这么小,这似乎有点矫枉过正。
理想情况下,我想要不需要太多保姆的东西(例如,检查服务正在运行)。
我还建议在网站上设置一个包含此类信息的页面,但可能要过几天才能检查。我们也不能让用户延长他们自己的有效期。
有没有其他可行的选择。
我有一个要求,即应该经常(仍有待确定)通知某个电子邮件分发列表关于即将到期的用户帐户。
我想知道实现这一点的最佳方法,我知道在 asp.net 中生成另一个线程来处理这种类型的事情通常是一个坏主意,所以我在想也许一个简单的服务是可行的方法,但是为了某些东西这么小,这似乎有点矫枉过正。
理想情况下,我想要不需要太多保姆的东西(例如,检查服务正在运行)。
我还建议在网站上设置一个包含此类信息的页面,但可能要过几天才能检查。我们也不能让用户延长他们自己的有效期。
有没有其他可行的选择。
最合适的工作方法是
创建一个应用程序,它将根据您的要求选择帐户到期日期在附近(例如,从今天起 10 天)的所有用户的列表。
此应用程序将安排为每日执行(您将创建一个带有日志文件的 exe,以显示在一次执行中出现的错误和发送的电子邮件总数。)
此应用程序将根据标准获取所有记录,并使用基本 HTML 模板将电子邮件发送给您的所有人。发送电子邮件后,您将更新notificationFlag
数据库中的一列 ( ),就1
好像您在过去 10 天内发送过一次一样。否则默认情况下它将是0
您可以在每天上午 12:10 安排 exe(以防您的数据库服务器和网络服务器不及时匹配)。.
这是我所做的,类似于 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());
}
}
}