邮件定时发送实现思路
发布:apollo | 发布时间: 2008年9月18日在做白金汉的网站过程中,胡侠先生对我帮助很多,也提了很多中肯的意见,这里对他先表示下感谢。根据他们的实际需求,有个类似网易信箱定时发信的功能,他们的电子杂志邮件需要可以设定在某个节日的固定时间发送,他们在节日也是要出去玩的,呵呵。
这里先简单说下实现思路:
既然要实现定时发送邮件,我想大家应该都知道,普通的BS结构的系统已经是没有办法来实现这样的需求了,即使是使用Ajax你来读取数据库,除非你把那个判断是否需要发送的页面一直在服务器上开着,当然这样做的弊端就是,你万一服务器需要重启,那你重启了之后,还需要去手工开启这个页面,或者你需要做个定时任务等等,反正实现是肯定可以实现的,就是那样的感觉不是很多。
既然微软在提供给我们VS的工具的同时,就已经把Winform跟Webform的相关知识及开发都已经教给我们了,那为什么不考虑下使用软件的方式来做呢?这里,我给出的解决方案是编写系统服务的程序去判断是否需要发送邮件,呵呵,废话不多说了,请大家查看代码先。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
namespace KingsEnglish
{
public partial class KingsEnglish : ServiceBase
{
public KingsEnglish()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
EventLog.WriteEntry("邮件定时发送系统","已经启动");
System.Timers.Timer MailTimer = new System.Timers.Timer(); //注意这个Timer不是Winform里面的时间控件
MailTimer.Interval = Convert.ToDouble(ConfigurationSettings.AppSettings["Timer"]);//例如:300000
MailTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.MailTimer_Elapsed);
MailTimer.Start();
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
EventLog.WriteEntry("邮件定时发送系统", "已经停止");
}
private void MailTimer_Elapsed(object sender, EventArgs e)
{
DataTable Dt = CNVP.SQLServer.DbHelperSQL.ExecuteDataTable("Select * From MailList Where ISSend=0 And (DATEDIFF(Hour, PostTime,'"+ DateTime.Now.ToString() +"') < 2)");
if (Dt != null && Dt.Rows.Count > 0)
{
SendMail(Dt.Rows[0]["Title"].ToString(),Dt.Rows[0]["UserMail"].ToString(),Dt.Rows[0]["Content"].ToString());
CNVP.SQLServer.DbHelperSQL.ExecuteSql("UPDATE MailList Set ISSend=1 Where ID="+ Dt.Rows[0]["ID"].ToString() +"");
EventLog.WriteEntry(Dt.Rows[0]["UserMail"].ToString(), "邮件发送成功");
}
Dt.Clear();
Dt.Dispose();
}
protected void SendMail(string Subject, string toMail, string Content)
{
CNVP.Mail.Message Jmail = new CNVP.Mail.Message(); //这个是Jmail组建
Jmail.Silent = true;
Jmail.Logging = true;
Jmail.Charset = "GB2312";
Jmail.ContentType = "text/html";
Jmail.AddRecipient(toMail, null, null);
Jmail.From = apollo_1314@hotmail.com; //邮件地址
Jmail.MailServerUserName = ConfigurationSettings.AppSettings["SMTPUserName"].ToString();//登陆的账号
Jmail.MailServerPassWord = ConfigurationSettings.AppSettings["SMTPUserPass"].ToString();//登陆的密码
Jmail.Subject = Subject;
Jmail.Body = Content;
Jmail.Send(ConfigurationSettings.AppSettings["SMTPServer"].ToString(), false);//这里是SMTP服务器的地址
Jmail.Close();
}
}
}
文件下载:注册服务工具.exe
- 相关文章:
中国频道空间使用Jmail发送邮件 (2007-5-14 22:9:50)
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。





