在做白金汉的网站过程中,胡侠先生对我帮助很多,也提了很多中肯的意见,这里对他先表示下感谢。根据他们的实际需求,有个类似网易信箱定时发信的功能,他们的电子杂志邮件需要可以设定在某个节日的固定时间发送,他们在节日也是要出去玩的,呵呵。

这里先简单说下实现思路:
既然要实现定时发送邮件,我想大家应该都知道,普通的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