如何编程实现定时发送邮件
本人已经会编写如何发送邮件,但是如何定制发送呢!
比如,我要每个星期五,下午5点,给某个人发送邮件!
请帮忙,谢谢!
问题点数:20、回复次数:14Top
1 楼chenjinaban(cj)回复于 2005-05-17 10:18:41 得分 0
我以前做法是做个发送邮件的程序,然后使用windows的计划任务去定时执行,达到发送邮件的目的Top
2 楼wuyi8808(空间/IV)回复于 2005-05-17 10:31:31 得分 0
使用计划任务Top
3 楼czsxj(知道一点)回复于 2005-05-17 10:39:20 得分 0
找快递Top
4 楼go_world_china()回复于 2005-05-17 10:56:03 得分 0
能不能编程实现 某个时间发送邮件(c#)Top
5 楼lyb_abiandbel(专注于OO分析与设计)回复于 2005-05-17 11:00:33 得分 0
既然会发送邮件,那就再写一个函数,当时间是你需要时调用邮件发送函数发送,不知道这样行不行?
Top
6 楼gmfirefox(荒诞居士)回复于 2005-05-17 13:12:32 得分 0
最好做成Windows服务Top
7 楼go_world_china()回复于 2005-05-17 13:47:45 得分 0
请问如何用windows服务,就是说。我怎么在c#调用windows服务!
比如,我想每个星期五,下午5点都给某人发email。怎么实现??Top
8 楼nonepassby(lcx)回复于 2005-05-17 13:59:24 得分 20
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
TestTimer timer = new TestTimer();
// 隔5秒运行第一次
TimeSpan start = TimeSpan.FromSeconds(5);
// 此后每10秒运行一次
TimeSpan interval = TimeSpan.FromSeconds(10);
// /// 每个星期五5时整运行
//
// // 当前的时间
// System.DateTime dt = DateTime.Now;
// // 第一次要运行的时间,初始化为当天5时
// System.DateTime firstDT = new DateTime(dt.Year,dt.Month,dt.Day,5,0,0);
// // 指定每周五定时运行
// System.DayOfWeek dow = DayOfWeek.Friday;
// // 一周间隔时间
// TimeSpan oneWeek = TimeSpan.FromDays(7);
//
// while(true)
// {
// // 判断每一次要运行的时间是不是星期五
// if (firstDT.DayOfWeek == dow)
// {
// // 如果当前时间小于每一天运行的时间,则第一次运行的时间有效,退出
// if (dt < firstDT)
// {
// break;
// }
// }
//
// // 每一次运行的日期加一,直到合适为止
// firstDT = firstDT.AddDays(1);
// }
//
// // 第一次运行的时间间隔(每一次要运行的时间减当前时间)
// start = firstDT.Subtract(dt);
// // 每隔一周运行一次
// interval = oneWeek;
// 启动定时器
timer.Run(start,interval);
Console.Read();
timer.Stop();
}
}
/// <summary>
/// TestTimer 的摘要说明。
/// </summary>
public class TestTimer
{
private Timer timer;
public TestTimer()
{
}
TimeSpan interval;
bool isFirst = true;
/// <summary>
/// 运行定时器
/// </summary>
/// <param name="firstStartTime">第一次运行时间间隔</param>
/// <param name="interval">运行时间间隔</param>
public void Run(TimeSpan firstStartTime, TimeSpan interval)
{
Console.WriteLine("开始时间:{0}",DateTime.Now.ToString());
this.interval = interval;
timer = new Timer(firstStartTime.TotalMilliseconds);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.AutoReset = true;
timer.Start();
}
/// <summary>
/// 停止定时器
/// </summary>
public void Stop()
{
if (timer != null)
{
timer.Stop();
timer.Close();
timer.Dispose();
timer = null;
}
}
private void timer_Elapsed(object sender,ElapsedEventArgs e)
{
if (isFirst)
{
isFirst = false;
timer.AutoReset = true;
timer.Interval = interval.TotalMilliseconds;
timer.Start();
}
Work();
}
/// <summary>
/// 工作
/// </summary>
public virtual void Work()
{
Console.WriteLine("工作时间:{0}",DateTime.Now.ToString());
// ... SEND EMAIL CODE HERE
}
}Top
9 楼nonepassby(lcx)回复于 2005-05-17 14:07:57 得分 0
using System;
using System.Timers;
利用同样方法,你还可以自己编写RunPerMonth(int day,int hour),每月运行一次
根据当前的时间计算每一次运行的时间间隔,和以后的时间间隔,只要具有这种规律性,都可以用此种方法实现Top
10 楼go_world_china()回复于 2005-05-17 15:27:37 得分 0
多谢,不过有几个问题想问下:
1. while(true)
// {
// // 判断每一次要运行的时间是不是星期五
// if (firstDT.DayOfWeek == dow)
// {
// // 如果当前时间小于每一天运行的时间,则第一次运行的时间有效,退出
// if (dt < firstDT)
// {
// break;
// }
// }
//
// // 每一次运行的日期加一,直到合适为止
// firstDT = firstDT.AddDays(1);
// }
如果当前的时间大于第一次要运行的时间怎么办??比如dt为6点了
那么 还要firstDT = firstDT.AddDays(1);??
2. timer = new Timer(firstStartTime.TotalMilliseconds);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
这2个没看懂是什么意思!
timer不是在前边定义了么,怎么有new了
timer.Elapsed += 这个就更看不懂了。
3.此方法应该放到哪,才能到时候就发mail呢?是不是防在服务器端的某个地方?
多谢!Top
11 楼nonepassby(lcx)回复于 2005-05-17 18:22:48 得分 0
1. yes , 只有等到下个星期五5点了
2. Timer 指的是System.Timers.Timer组件,你看一下帮助就明白了.
3. class1是个测试例子,是个控制台程序.你真正要做的事应放在TestTimer.Work()方法中
TestTimer.Run()方法是真正要用的方法,而在你的应用程序中是要确定其中的两个参数,来调用它,比如,你首先要确定今天离最近一个星期五5点的时间间隔,这是第一个参数,第二个参数是你的后面的间隔期限(每周,即7天).要停止定时器事件时调用TestTimer.Stop()方法
4.你可以先运行一下这段代码看看是不是你想要的效果Top
12 楼jamesfay(狒狒)回复于 2005-05-17 19:42:22 得分 0
MailMessage mail = new MailMessage();
mail.From = mailFrom;
mail.To = mailTo;
mail.Subject = mSubject;
mail.Body = mBody;
mail.BodyFormat = MailFormat.Html;
// required NTLM authentication
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",2);
SmtpMail.SmtpServer = smtpServer;
SmtpMail.Send(mail);
Top
13 楼go_world_china()回复于 2005-05-18 08:28:38 得分 0
你的程序我运行了。是我想要的!
但是,对于第一个问题,我现在还是有点不明白。
比如,我要是星期五晚上的6点,第一次运行这个程序。
那么,就不可能进到
if (dt < firstDT)
{break;}
对不??
那么,就是firstDT = firstDT.AddDays(1)
等到了下个星期五,不还是6点么!
那不就是死循环了么!
Top
14 楼maomaoli(一树梨花)回复于 2005-05-24 22:42:52 得分 0
markTop




