我已实现手动的邮件发送功能,现在难点定是比如我要每隔48小时检查一次ACCESS数据库的某个字段纪录,如果找不到纪录就发一份邮件到相对于这条纪录的用户,求大侠给个思路或例子,感激不尽~

解决方案 »

  1.   

    写发邮件的sp,建立一个job,设置为定期执行就可以了
      

  2.   

    用TIMER,设置时间间隔,定期搜索数据库字段,后面的就不用多说了。实现很简单。我有用TIMER实现文本自动导入数据库实例。
      

  3.   

    menglory(繁华似锦)大哥你做的实例借我参考一下啊:
    [email protected]
      

  4.   

    要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。  我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器,示例代码如下所示(为考虑篇幅,仅提供部分代码供读者参考):private java.util.Timer timer = null;
    public void contextInitialized(ServletContextEvent event) {
    timer = new java.util.Timer(true);
    event.getServletContext().log("定时器已启动"); 
    timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);
    event.getServletContext().log("已经添加任务调度表");
    }
    public void contextDestroyed(ServletContextEvent event) {
    timer.cancel();
    event.getServletContext().log("定时器销毁");
    }   以上代码中, timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000)这一行为定时器调度语句,其中MyTask是自定义需要被调度的执行任务(在我的财政数据中心项目中就是报表计算引擎入口),从java.util.TimerTask继承,下面会重点讲述,第三个参数表示每小时(即60*60*1000毫秒)被触发一次,中间参数0表示无延迟。其它代码相当简单,不再详细说明。  下面介绍MyTask的实现,上面的代码中看到了在构造MyTask时,传入了javax.servlet.ServletContext类型参数,是为记录Servlet日志方便而传入,因此需要重载MyTask的构造函数(其父类java.util.TimerTask原构造函数是没有参数的)。在timer.schedule()的调度中,设置了每小时调度一次,因此如果想实现调度任务每24小时被执行一次,还需要判断一下时钟点,以常量C_SCHEDULE_HOUR表示(晚上12点,也即0点)。同时为防止24小时执行下来,任务还未执行完(当然,一般任务是没有这么长的),避免第二次又被调度以引起执行冲突,设置了当前是否正在执行的状态标志isRunning。示例代码如下所示:private static final int C_SCHEDULE_HOUR = 0;
    private static boolean isRunning = false;
    private ServletContext context = null;
    public MyTask(ServletContext context) {
    this.context = context;
    }
    public void run() {
    Calendar cal = Calendar.getInstance(); 
    if (!isRunning) { 
    if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) { 
    isRunning = true; 
    context.log("开始执行指定任务");//TODO 添加自定义的详细任务,以下只是示例
    int i = 0;
    while (i++ < 10) {
    context.log("已完成任务的" + i + "/" + 10);

    isRunning = false;
    context.log("指定任务执行结束"); 

    } else {
    context.log("上一次任务执行还未结束");
    }

       上面代码中"//TODO……"之下四行是真正被调度执行的演示代码(在我的财政数据中心项目中就是报表计算过程),您可以换成自己希望执行的语句。  到这儿,ServletContextListener和MyTask的代码都已完整了。最后一步就是把ServletContextListener部署到您的Web工程中去,在您工程的web.xml配置文件中加入如下三行:
    <listener>
    <listener-class>com.test.ContextListener</listener-class>
    </listener>    当然,上面的com.test得换成您自己的包名了。保存web.xml文件后,把工程打包部署到Tomcat中即可。任务会在每晚12点至凌晨1点之间被执行,上面的代码会在Tomcat的日志文件中记录如下:2003-12-05 0:21:39 开始执行指定任务
    2003-12-05 0:21:39 已完成任务的1/10
    ……
    2003-12-05 0:21:39 已完成任务的10/10
    2003-12-05 0:21:39 指定任务执行结束以上援引自http://www.kupage.com/wpm/12/20040302/1701290000027kkaxl1y.htm
      

  5.   

    这个我网上找到过的,有什么用呢?我需要在JSP环境下怎么配置及执行,稍微具体一点,比如要导入什么包,ROOT下要怎么配制,怎样开始和停止任务时间程序,在哪里实现他的自动计划时间调度你这样从网上拷来的资料我早找到过了,不然我就不到这里来问了哦~不过还是要谢谢你,还有高手能指点一下吗?
      

  6.   

    我已经下了quartz,把lib目录下的所有文件放到了WEB-INF\lib下,quartz.properties文件文件放到了\ROOT\WEB-INF下,本来没有放log4j.properties到\WEB-INF\classes下的时候会出现No appenders could be found for logger,放了以后什么反映都没了!!WEB.xml里加了
    <servlet>
      <servlet-name>QuartzInitializer</servlet-name>
      <display-name>Quartz Initializer Servlet</display-name>
      <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>
    现在我要怎么测试是否初始化成功了呢?成功以后怎么做去跟数据库打教导,我JAVA基础一点都没有的,但现在做的JSP网站又要用到这个,求哪位有经验的大侠帮帮我,全部分相送~
      

  7.   

    哪位帮我完整解决100分相送,我的QQ:52752028,MSN:[email protected]
      

  8.   

    http://www.kupage.com/wpm/12/20040302/1701290000027kkaxl1y.htm这里已经够详细了,以前我也是看到这篇文章做出来的,精心看一下吧
      

  9.   

    ContextListener转换为。CLASS不成功(new MyTask()不识别,怎么办?
      

  10.   

    sole_lodestar(弱势群体应该怎么办)你做的能让我参考一下吗?我没什么JAVA基础,你的那个例子不是很能理解,问题有二:
    1、ContextListener.java文件是编译成.class文件的,他怎么认出 MyTask()这样的自定义调度任务呢?
    2、我的数据库是JSP的,跟数据库打交道去查询条件,返回条件都是用JSP语言的,你这里的private static final int C_SCHEDULE_HOUR = 0;
    private static boolean isRunning = false;
    private ServletContext context = null;
    public MyTask(ServletContext context) {
    this.context = context;
    ......的代码是JSP页面里的吗?如果是的话页面不打开就不能调度,如果不是的话就不能用JSP的查询语句跟数据库打交道,望解答谢谢~
      

  11.   

    http://www.chinaitpower.com/A/2004-08-14/144826.html
      

  12.   

    写个Servlet然后自动根据日期发邮件~
      

  13.   

    这是我根据上面那个连接http://www.chinaitpower.com/A/2004-08-14/144826.html
    做MailSender.class是遇到的报错,请sole_lodestar大哥帮我解答一下:
     1、 MailConfigManager manager = MailConfigManager.getInstance();//  MailConfigManager是怎么回事,我为什么cannot resolve symbol:class MailConfigManager
    2、cannot resolve symbol symbol:variable transport location: class com.email.MailSender Transport.send(rs);//发送
    这里我的com.email.MailSender 还是个MailSender.java(.java文件)有关系吗?按照要求似乎要先生成MailSenderServlet.class文件的可是我那个文件生成不了,报错为:method getInitPrarameter
    location:clss com.mail.MailSenderServlet
    哪位大侠帮我看看哦
      

  14.   

    cannot resolve symbol:class MailConfigManager?
    顶一记
      

  15.   

    数据库: jdbc
    邮件: javamail
    Job: java程序而已, 有个死循环, 不会退出, 没隔48小时激活一次方案:
       在Job中, 通过Jdbc读取Access某个表-字段信息, 如果符合你的条件, 使用Javamail发个邮件.每个主题都有相关的文档, google找一找就有了
      

  16.   

    答:sole_lodestar(弱势群体应该怎么办) 谢谢你的关心,还有点问题~~
    生成MailSender.class的时候报错,问题出在下面一句:
    MailConfigManager manager = MailConfigManager.getInstance();
    我看没用到就把它删了,还有一句mbp.setFileName(MimeUtility.encodeWord(files[i]), "GBK", null));中的setFileName没定义我也把它删了运行通过,不过不知道是否会对我实现功能产生影响。
    生成MailSenderServlet.class的时候有cannot resolve symbol class MailSender,我知道是没有把MailSender.class的路径包含进去但不知道怎么做答TinyJimmy(Jimmy)我不是学JAVA的,所以每一步都走的有点困难,资料我已经找了不少也解决了不少问题,我想离成功不远啦,同样谢谢你
      

  17.   

    relax:
    From: [email protected] [mailto:[email protected]
    Sent: 2006年5月18日 14:19
    To: undisclosed-recipients:
    Subject: Fw: known issue for upgrade 女友7.0 to 老婆1.0
    > 亲爱的技术支持:
    >
    >    我急需您的帮助。我最近将"女朋友7.0"升级到"妻子1.0",发现这个新程序意外地
    >    启动了孩子生产程序,而且占用了大量的空间和珍贵的资源。这在产品的使用手册
    >    中没有提到。此外"妻子1.0"自动将自己安装到其他的所有的程序中,它随系统同
    >    时启动,监控整个系统的状态。男人夜出2.5"和"高尔夫5.3"无法再运行,一旦运
    >    行该程序系统即行崩溃。试图运行"周日足球6.3"经常失败,而"周六购物7.1"却代
    >    之运行。看来我无法保留"妻子1.0",因为它和我喜欢运行的任何程序都不相
    >    容。我打算回到"女朋友7.0",可是这个程序又无法卸载。
    >
    >    请您帮帮我吧!

    >    乔
    >
    >
    >    给乔的回信:
    >
    >    亲爱的乔:
    >
    >    这是个很普通的问题,产生于你对基本原理的不了解。
    >
    >    很多的男人将"女朋友7.0"升级到"妻子1.0",以为"妻子1.0"是一个"实用与娱乐程
    >    序"。然而"妻子1.0"却是个操作系统,是被设计用来运行所有程序的。你不可能清 
    >    除"妻子1.0",也不可能回到"女朋友7.0",因为"妻子1.0"的设计中不具有这个功
    >    能,无论是卸载、删除或是清除已经安装在系统中的这些程序文件,都是不可能
    >    的。
    >
    >    有些人曾试图安装"女朋友8.0"或者"妻子2.0",结果是产生了更多的问题(参见手
    >    册中的赡养费/孩子的养育/律师费用)。我安装过"妻子1.0",我建议你保持现在的 
    >    安装状态,妥善解决遇到的困难。
    >
    >    当任何错误或问题出现的时候,不论你认为是什么原因引起的,你必须运行
    >    "C:\我道歉"程序,并且避免使用"退出键"。必要时可能需要运行"C:\我道
    >    歉"多次,希望最终能使*作系统恢复到初始状态。
    >
    >    "妻子1.0"虽然是一个需要高保养的程序,但同时对人可能是非常有益的。充分地 
    >    利用它,需要买些额外的软件比如"鲜花2.0"和"巧克力5.0"。
    >    不要在任何情况下安装"秘书(短裙版)",因为"妻子1.0"不支持这种程序,而且系
    >    统多数时候肯定会崩溃。
      

  18.   

    答:sole_lodestar(弱势群体应该怎么办) 谢谢你的关心,还有点问题~~
    生成MailSender.class的时候报错,问题出在下面一句:
    MailConfigManager manager = MailConfigManager.getInstance();
    我看没用到就把它删了,还有一句mbp.setFileName(MimeUtility.encodeWord(files[i]), "GBK", null));中的setFileName没定义我也把它删了运行通过,不过不知道是否会对我实现功能产生影响。
    生成MailSenderServlet.class的时候有cannot resolve symbol class MailSender,我知道是没有把MailSender.class的路径包含进去但不知道怎么做答TinyJimmy(Jimmy)我不是学JAVA的,所以每一步都走的有点困难,资料我已经找了不少也解决了不少问题,我想离成功不远啦,同样谢谢你