happy664618843通过本文主要向大家介绍了windows 7 asp.net,js调用asp.net方法,asp.net,asp net培训,asp和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文实例讲述了asp.net基于windows服务实现定时发送邮件的方法。分享给大家供大家参考,具体如下:
//定义组件
private System.Timers.Timer time;
public int nowhour;
public int minutes;
public string sendTime;
public Thread th;
public string isOpen;//是否启用定时发送
public string strToEUser;
public static int index = -1;
public static ArrayList mulitaddress;
//服务开始
protected override void OnStart(string[] args)
{
time = new System.Timers.Timer();
time.Enabled = true;
time.AutoReset = true;
//定时执行方法
time.Elapsed+=new System.Timers.ElapsedEventHandler(time_Elapsed);
UserEmail toUser =new UserEmail();
mulitaddress = GetMailAdressName();
// LogHelper.SaveNote("当前索引的值" + index.ToString());
Thread.Sleep(2000);
time.Start();
}
public class LogHelper
{
public static void SaveNote(string note)
{
FileStream stream = new FileStream(GetLogDirectory("Common") + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);
StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
writer.WriteLine("================================================================");
writer.WriteLine(string.Format("Note:/t{0}", note));
writer.WriteLine(string.Format("DateTime:/t{0}/r/n/r/n",DateTime.Now.ToString()));
stream.Flush();
writer.Close();
stream.Close();
stream.Dispose();
writer.Dispose();
}
public static void SaveNote(string note, string txtname)
{
FileStream stream = new FileStream(GetLogDirectory(txtname) + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);
StreamWriter writer = new StreamWriter(stream, Encoding.GetEncoding("gb2312"));
writer.WriteLine("================================================================");
writer.WriteLine(string.Format("Note:/t{0}", note));
writer.WriteLine(string.Format("DateTime:/t{0}/r/n/r/n", DateTime.Now.ToString("yyyyMMddHHmmss")));
stream.Flush();
writer.Close();
stream.Close();
stream.Dispose();
writer.Dispose();
}
public static void SaveException(Exception e)
{
SaveException(e, string.Empty);
}
public static void SaveException(Exception e, string memo)
{
FileStream stream = new FileStream(GetLogDirectory("Common") + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);
StreamWriter writer = new StreamWriter(stream);
writer.WriteLine("================================================================");
writer.WriteLine(string.Format("Memo:/t{0}", memo));
writer.WriteLine(string.Format("DateTime:/t{0}", DateTime.Now.ToShortTimeString()));
writer.WriteLine(string.Format("Message:/t{0}", e.Message));
writer.WriteLine(string.Format("StackTrace:/r/n----------/r/n{0}/r/n----------/r/n/r/n/r/n", e.StackTrace));
stream.Flush();
writer.Close();
stream.Close();
stream.Dispose();
writer.Dispose();
}
public static string GetLogDirectory(string category)
{
string baseDirectory = string.Empty;
if ((HttpContext.Current != null) && (HttpContext.Current.Server != null))
{
baseDirectory = HttpContext.Current.Server.MapPath("~");
}
else
{
baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
}
if ((baseDirectory[baseDirectory.Length - 1] != '/') && (baseDirectory[baseDirectory.Length - 1] != '//'))
{
baseDirectory = baseDirectory + @"/";
}
baseDirectory = string.Format(@"{0}Log/{1}/", baseDirectory, category);
if (!Directory.Exists(baseDirectory))
{
Directory.CreateDirectory(baseDirectory);
}
return baseDirectory;
}
}
void time_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
if (mulitaddress != null)
{
LogHelper.SaveNote("进入time_Elapsed");
//获取定时发送时间
sendTime = Convert.ToString(GetConfigValue("sendTime"));
LogHelper.SaveNote("sendTime" + sendTime);
//是否开启定时发送功能
isOpen = GetConfigValue("isOpen");
int sleeptime = Convert.ToInt32(GetConfigValue("SleepTime"));
int stoptime = Convert.ToInt32(GetConfigValue("stoptime"));
//LogHelper.SaveNote("数组长度" + mulitaddress.Count);
// LogHelper.SaveNote("是否开启定时发送功能" + isOpen + "定时时间" + sendTime + "定时小时数:" + Convert.ToInt32(sendTime.Split(new char[] { ':' })[0]) + "定时分钟数:" + Convert.ToInt32(sendTime.Split(new char[] { ':' })[1]));
if (isOpen == "true")
{
//现在时间 小时
nowhour = Convert.ToInt32(DateTime.Now.Hour.ToString());//10
//现在分钟
minutes = Convert.ToInt32(DateTime.Now.Minute.ToString());//5
//获取发送小时
int sendhour = Convert.ToInt32(sendTime.Split(new char[] { ':' })[0]);
//获取发送的分钟
int sendMinute = Convert.ToInt32(sendTime.Split(new char[] { ':' })[1]);
LogHelper.SaveNote("进入定时发送邮件服务! 定时小时为:" + sendhour.ToString() + "定时分钟为:" + sendMinute.ToString() + "现在小时为:" + nowhour.ToString() + "现在定时的分钟为:" + minutes.ToString());
LogHelper.SaveNote("当前索引的值" + index.ToString());
if (nowhour == stoptime)
{
LogHelper.SaveNote("停止时间点到了 邮件停止发送 !!!");
index = -1;
}
else
{
//如果和当前的时间 小时相等 则定时发送邮件
if ((Convert.ToDateTime(DateTime.Now.ToShortTimeString()) >= Convert.ToDateTime(sendTime)) && index < mulitaddress.Count)
{
index++;
if (index < mulitaddress.Count)
{
SendEmail(((UserEmail)mulitaddress[index]));
}
else
{
LogHelper.SaveNote("发送完毕 当前的索引值为" + index.ToString());
}
}
}
}
else
{
//LogHelper.SaveNote("当前索引的值" + index.ToString());
index++;
if (index < mulitaddress.Count)
{
SendEmail(((UserEmail)mulitaddress[index]));
}
else
{
LogHelper.SaveNote("发送完毕 时间停止");
time.Enabled = false;
time.Stop();
}
}
Thread.Sleep(sleeptime);
}
else
LogHelper.SaveNote("mulitaddress=null");
}
catch (Exception ex)
{
LogHelper.SaveNote(ex.ToString());
}
}
public ArrayList GetMailAdressName()
{
ArrayList list = new ArrayList();
string strSQL = "select b.mailAddress, a.mailtemplate,a.title from tg_product as a inner join tg_mailOrder as b on a.ccode=b.ccode where a.createtime=(select max(createtime) from tg_product)";
SqlDataReader dr = SqlHelper.ExecuteReader(CommandType.Text, strSQL, null);
if (dr.HasRows)
{
while (dr.Read())
{
UserEmail email = new UserEmail();
email.Mailaddres = dr["mailAddress"].ToString();
email.Title = dr["title"].ToString();
email.Contents = dr["mailtemplate"].ToString();
list.Add(email);
}
}
return list;
}
/// <summary>
/// 定义用户邮件 标题 内容 Email地址
/// </summary>
public class UserEmail {
private string title;
private string contents;
public string Contents
{
get { return contents; }
set { contents = value; }
}
private string mailaddres;
public string Mailaddres
{
get { return mailaddres; }
set { mailaddres = value; }
}
public string Title {
get{return title;}
set { title = value; }
}
}
#region 发送邮件
/// <summary>
/// 发送邮件
/// </summary>
public void SendEmail(UserEmail user)
{
try
{
LogHelper.SaveNote("

