asp.net如何实现定时的发email?

解决方案 »

  1.   

    Timer 事件吧 定时去发你的邮件。 最好的话写成windows服务 每天定时开启去发送邮件
      

  2.   

    <%@ Application Language="C#" %><%@ Import Namespace="Newer.SoftFactory.Util" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %><script runat="server">
        public static string connectionString = ConfigurationManager.ConnectionStrings["Newer"].ConnectionString;
        private readonly Newer.SoftFactory.DataTranslateObjects.MyDesk.Mail.PRI_MAILINFO _mode = new Newer.SoftFactory.DataTranslateObjects.MyDesk.Mail.PRI_MAILINFO();
        public void ChoiseState()
        {
            SqlConnection con = new SqlConnection(connectionString);
            string sql = @"select mr_id from flow_meeting a,pub_meeting_room b,hr_emp c where 1=1
                        and a.m_room=b.mr_id and a.proposer=c.emp_id and useing_falg=1 and m_start<=getdate() and m_end>=getdate() and datediff(minute,getdate(),m_end)<=0";
            SqlCommand cmd = new SqlCommand(sql, con);
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                while (sdr.Read())
                {
                    if (Convert.ToInt32(sdr[0]) > 0)
                    {
                        SqlConnection con1 = new SqlConnection(connectionString);
                        string sql1 = "update pub_meeting_room set useing_falg=0 where mr_id=" + sdr[0] + "";
                        SqlCommand cmd1 = new SqlCommand(sql1, con1);
                        con1.Open();
                        cmd1.ExecuteNonQuery();
                        con1.Close();
                    }
                }
            }
            con.Close();
        }
        public void State()
        {
            while (true)
            {
                Thread.Sleep(10000);
                ChoiseState();
            }
        }    
        public int asd(Newer.SoftFactory.DataTranslateObjects.MyDesk.Mail.PRI_MAILINFO priMail)
       {
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "select * from PRI_MAIL where SEND_FLAG='0' and datediff(day,getdate(),send_time)<=0";
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            con.Open();
            SqlDataReader sdr = cmd.ExecuteReader();
            while (sdr.Read())
            {
                string id = sdr["TO_ID"].ToString();
                string mailid = sdr["MAIL_ID"].ToString();
                string[] ids = id.Split(',');
                foreach (string toID in ids)
                {
                    SqlConnection con1 = new SqlConnection(connectionString);
                    SqlCommand cmd1 = new SqlCommand();
                    cmd1.CommandText = "insert into PRI_MAIL_TO values(@MAIL_ID,@TO_ID,@READ_FLAG,@DELETE_FLAG)";
                    cmd1.Connection = con1;
                    con1.Open();
                    SqlParameter[] parm = new SqlParameter[4];
                    parm[0] = new SqlParameter("@MAIL_ID", mailid);
                    parm[1] = new SqlParameter("@TO_ID", toID);
                    parm[2] = new SqlParameter("@READ_FLAG", "0");
                    parm[3] = new SqlParameter("@DELETE_FLAG", "0");
                    foreach (SqlParameter parms in parm)
                    {
                        cmd1.Parameters.Add(parms);
                    }
                    cmd1.ExecuteNonQuery();
                    con1.Close();
                }
                SqlConnection con2 = new SqlConnection(connectionString);
                SqlCommand cmd2 = new SqlCommand();
                cmd2.CommandText = "update pri_mail set send_flag='1' where mail_id=" + mailid + "";
                cmd2.Connection = con2;
                con2.Open();
                cmd2.ExecuteNonQuery();
                con2.Close();
            }
            con.Close();
            return 0;
        }    public void sendMail()
        {
            while (true)
            {
                Thread.Sleep(5000);
                asd(_mode);
            }
        }
        
        void Application_Start(object sender, EventArgs e) 
        {
            Thread th = new Thread(new ThreadStart(State));
            th.Start();
            //在应用程序启动时运行的代码
            Thread t = new Thread(new ThreadStart(sendMail));
            t.Start();
        }
        
        void Application_End(object sender, EventArgs e) 
        {
            //在应用程序关闭时运行的代码    }
            
        void Application_Error(object sender, EventArgs e) 
        { 
            //在出现未处理的错误时运行的代码
            Exception ex = Server.GetLastError().GetBaseException();
            Server.ClearError();
            Application["Error"] = ex;
            Response.Redirect("~/ErrorPage/Error.aspx");     
        }    void Session_Start(object sender, EventArgs e) 
        {
            //在新会话启动时运行的代码
        }    void Session_End(object sender, EventArgs e) 
        {
            //在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式 
            //设置为 StateServer 或 SQLServer,则不会引发该事件。
        }
           
    </script>
      

  3.   

    在服务器端windows服务
    或ajax轮询执行操作
    System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("");
    client.UseDefaultCredentials = false;
    client.Credentials = new System.Net.NetworkCredential("邮箱名称", "密码");
    client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
    System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
    message.SubjectEncoding = System.Text.Encoding.UTF8;
    message.BodyEncoding = System.Text.Encoding.UTF8;
    message.From = new System.Net.Mail.MailAddress("", "", System.Text.Encoding.UTF8);
    message.To.Add(new System.Net.Mail.MailAddress("","",
    System.Text.Encoding.UTF8));
    message.IsBodyHtml = true;
    message.Subject = "";
    message.Body ="";
    client.Send(message);
      

  4.   

    要搞清楚一点,你做的asp.net在服务器中不会一直运行,除非有请求(request),这就是说,必需要这个网站一直被浏览器浏览着。所以你要做的就是一直保持浏览器打开并访问这个站点,然后用js(ajax)通过定时器(setInterval)定时请求这个asp.net地址,asp.net收到请求,就去发邮件。当然怎样发方法很多jmail控件,asp.net本身也有带发邮件功能。
      

  5.   

    利用System.Timer类,定时器,写在Global文件的Application_start方法里。