当前位置:K88软件开发文章中心编程语言.NET.NET01 → 文章内容

asp.net基于windows服务实现定时发送邮件的方法

减小字体 增大字体 作者:     来源:asp编程网  发布时间:2018-12-30 7:43:57

本文实例讲述了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] != &apos
/&apos
) && (baseDirectory[baseDirectory.Length - 1] != &apos
//&apos
))
{ 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[]
{ &apos
:&apos
})[0]) + "定时分钟数:" + Convert.ToInt32(sendTime.Split(new char[]
{ &apos
:&apos
})[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[]
{ &apos
:&apos
})[0])
//获取发送的分钟 int sendMinute = Convert.ToInt32(sendTime.Split(new char[]
{ &apos
:&apos
})[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
}///
/// 定义用户邮件 标题 内容 Email地址///
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 发送邮件///
/// 发送邮件///
public void SendEmail(UserEmail user)
{ try
{ LogHelper.SaveNote("进入SendEmail!!!")
//邮件服务器 string smtpserver = GetConfigValue("smtpserver")
//发件人的邮箱名称 string emailuserName = GetConfigValue("emailuserName")
//发件人的邮箱密码 string emailuserpwd = GetConfigValue("emailuserpwd")
//邮箱地址 string emailfrom = GetConfigValue("emailfrom")
int port = Convert.ToInt32(GetConfigValue("serverPort"))
bool f = true
//是否经过SSL加密 string isSSL = GetConfigValue("SSL")
if (isSSL == "true")
{ f = true
} else
{ f = false
} LogHelper.SaveNote("发件人的邮箱名称" + emailuserName + "邮件地址(emailFrom)" + emailfrom + "收件人" + user.Mailaddres)
SendEmailToUser(smtpserver, port, f, user.Mailaddres, null, emailuserName, emailuserpwd, emailfrom, user.Title,user.Contents)
LogHelper.SaveNote("Send Mail Success")
} //获取异常信息 catch (Exception error)
{ //写入异常信息 using (StreamWriter sw = new StreamWriter("F://MailErrorlog.txt", true, System.Text.Encoding.UTF8))
{ sw.WriteLine(DateTime.Now.ToString() + ":")
sw.WriteLine("Exception 异常信息如下.................")
sw.WriteLine(error.ToString())
sw.WriteLine("---------------------------------------------")
sw.Close()
} }}
#endregion
#region 利用.Net自带类(SmtpClient) 发送邮件///
/// 利用.Net自带类(SmtpClient) 发送邮件///
/// 邮件服务器
/// 用户名(邮箱名称)
/// 密码
/// 是否经过SSL加密
/// 邮件服务器端口(没有加密 一般都是25)
/// 发件人
/// 收件人
/// 主题
/// 内容
/// 发送多人 收件人的邮箱地址以逗号隔开
/// 发送的附件名称 没有附件则为null or ""
public void SendEmailToUser(string stmpserver,int port,bool f, string Mulitaddress, string attachmentName, string username, string pwd, string strfrom, string subject, string body)
{ string ErrorLog = GetConfigValue("ErrorLog")
SmtpClient smtp = new SmtpClient()
//发送邮件的方式 smtp.DeliveryMethod = SmtpDeliveryMethod.Network
//指定邮件服务器 smtp.Host = stmpserver
//Gmail QQ stmp ssl加密使用的端口 smtp.Port = port
smtp.EnableSsl = f

//true 经过ssl加密 //验证发件人的身份 用户名(邮件地址和密码) smtp.Credentials = new System.Net.NetworkCredential(username, pwd)
//初始化信息(来自 接收人) MailMessage _mailmessage = new MailMessage()
//_mailmessage.To = strto
//发送多个人 接收人邮件地址以,隔开 _mailmessage.From = new MailAddress(strfrom)
_mailmessage.To.Add(Mulitaddress)
//如果发送失败,SMTP 服务器将发送 失败邮件通知 _mailmessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure
//优先级 _mailmessage.Priority = MailPriority.High
//发送主题 _mailmessage.Subject = subject
//有附件则添加附件 if (!string.IsNullOrEmpty(attachmentName))
{ System.Net.Mail.Attachment attch = new System.Net.Mail.Attachment(attachmentName)
_mailmessage.Attachments.Add(attch)
} //邮件主题编码 _mailmessage.SubjectEncoding = System.Text.Encoding.UTF8
//指定发送的格式 (Html) _mailmessage.IsBodyHtml = true
//指定发送邮件的编码 _mailmessage.BodyEncoding = System.Text.Encoding.UTF8
//指定邮件内容 _mailmessage.Body = body
//发送邮件 try
{ smtp.Send(_mailmessage)
} catch (Exception ex)
{ using (StreamWriter writer = new StreamWriter(ErrorLog+"://MailErrorlog.txt", true, System.Text.Encoding.UTF8))
{ writer.WriteLine("---------------------------------------------")
writer.WriteLine("SendEmail方法发送邮件错误日志................")
writer.WriteLine(ex.ToString())
writer.Flush()
writer.Close()
} }}
#endregion
#region 获取邮件配置节点的值///
/// 加载相应配置文件 并按节点名称获取对应的值///
/// 当前节点的名称
/// 返回当前节点名称所对应的值
public string GetConfigValue(string target)
{ string configpath=System.Windows.Forms.Application.StartupPath.ToString() + "/Email.config"
return GetConfigValue(configpath, target)
}///
/// 根据节点名称获取配置文件对应的值(邮件配置信息)///
/// 配置文件路径
/// 要获取配置节点的名称
/// 返回当前节点名称所对应的值
public string GetConfigValue(string configpath, string target)
{ XmlDocument doc = new XmlDocument()
//加载文件路径s doc.Load(configpath)
//获取当前节点的根节点 XmlElement root = doc.DocumentElement
//获取当前节点下所有匹配子节点元素 XmlNodeList xmlnode = root.GetElementsByTagName(target)
//返回值 return xmlnode[0].InnerXml
}
#endregion//服务结束protected override void OnStop()
{ time.Enabled = false
}

E

[1] [2] [3]  下一页


asp.net基于windows服务实现定时发送邮件的方法