我要求每隔一段时间(仍有待确定)通知某个电子邮件分发列表有关即将到期的用户帐户。
我想知道实现这一目标的最佳方法,我知道在asp.net中生成另一个线程以处理这类事情通常是一个坏主意,所以我想也许一个简单的服务是要走的路但是对于那么小的东西,这似乎有些过度。
理想情况下,我想要一些不需要太多保姆的东西(例如检查服务正在运行)。
我还建议在网站上有一个包含此类信息的页面,但很可能在检查之前几天。我们也不能让用户延长他们自己的到期日期。
还有其他可行的选择。
答案 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());
}
}
}