CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何编程实现定时发送邮件

楼主go_world_china()2005-05-17 09:56:14 在 .NET技术 / C# 提问

本人已经会编写如何发送邮件,但是如何定制发送呢!  
  比如,我要每个星期五,下午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

相关问题

  • 怎么编程实现登入到邮件服务器
  • 怎样编程实现只接受指定的邮件?
  • 如何编程实现向outlook express中添加邮件规则?
  • 如何通过编程实现在Exchange Server中增加邮件用户
  • EXCHANGE SERVER客户端如何编程实现接收发送邮件??
  • 在编程发邮件(SMTP)时,怎么实现“身份验证”,要不我不能发邮件!
  • 如何利用编程方式实现计算机的定时重起?
  • 能不能通过编程控制outlook的运行?比如定时收取邮件?
  • 有的邮箱在发送邮件的时候校验密码,如何在smtp中编程实现?
  • 高分请教: 如果用编程实现完全删除一个用户,包括他的邮件文件**.nsf

关键词

  • 邮件
  • 间隔
  • start
  • 运行
  • timers
  • timespan
  • testtimer
  • firstdt
  • 时间
  • interval

得分解答快速导航

  • 帖主:go_world_china
  • nonepassby

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo