asp.net如何实现定时的发email? asp.net如何实现定时的发email? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Timer 事件吧 定时去发你的邮件。 最好的话写成windows服务 每天定时开启去发送邮件 <%@ 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> 在服务器端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); 要搞清楚一点,你做的asp.net在服务器中不会一直运行,除非有请求(request),这就是说,必需要这个网站一直被浏览器浏览着。所以你要做的就是一直保持浏览器打开并访问这个站点,然后用js(ajax)通过定时器(setInterval)定时请求这个asp.net地址,asp.net收到请求,就去发邮件。当然怎样发方法很多jmail控件,asp.net本身也有带发邮件功能。 利用System.Timer类,定时器,写在Global文件的Application_start方法里。 GridView动态添加列,刷新(回发),模板列的控件丢失 vs2003和vs2005有什么区别? 请问一个关于执行存储过程的问题 如果2个人同时访问一条记录,后者修改的有效,如何处理这种操作! javascript 如何获取ImageButton的AlternateText 登陆 高分求教:怎样向包括int, DateTime等非string参数的函数传递空值? Treeview的选择节点图像问题 为什么得不到TextBox的值? asp.net建站的困惑!言者均有分! 一个给多选题判分的代码,老是只判一道题,看不出错误。 Image类怎么实现截取图片
<%@ 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>
或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);