`
daidalei321
  • 浏览: 110750 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java使用定时器,定时发送邮件

    博客分类:
  • java
阅读更多

       最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声!

 

首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)

如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);

schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒

由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.

要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:

      

public class MyTimerTask implements ServletContextListener
{
 private Timer timer = null;  
 public void contextDestroyed(ServletContextEvent event)
 {  
  timer.cancel();
  event.getServletContext().log("定时器销毁");  
 }   
 public void contextInitialized(ServletContextEvent event)
 {
  //在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
  timer = new Timer(true);
  event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到
  //调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
  timer.schedule(new SendEmail(event.getServletContext()),0,24*60*60*1000);  
 }
}

 

 

 使用javamail发送邮件需要两个包(下面我上传的有,下载即可):activation.jar   mail.jar将这两个报发到项目的lib目录下

public class SendEmail extends TimerTask
{
 private ServletContext context = null;
 
 public SendEmail(ServletContext context)
 {
  this.context = context;
 }
 
 @Override
 public void run()
 { 
      /*
      * 以下为javamail的邮件发送
      */

       System.out.println("正在发送邮件");

        Properties props=new Properties();
        props.put("mail.smtp.host","smtp.163.com");//发件人使用发邮件的电子信箱服务器我使用的是163的服务器
        props.put("mail.smtp.auth","true"); //这样才能通过验证
        Session s=Session.getInstance(props);
        s.setDebug(true);

        MimeMessage message=new MimeMessage(s);

        //给消息对象设置发件人/收件人/主题/发信时间
        InternetAddress from=new InternetAddress("daida@163.com");  //发邮件的出发地(发件人的信箱),这是我的邮箱地址,使用请改成你的有效地址
        message.setFrom(from);
        InternetAddress to=new InternetAddress(tto);// tto为发邮件的目的地(收件人信箱)

        message.setRecipient(Message.RecipientType.TO,to);
        message.setSubject(ttitle);// ttitle为邮件的标题
        message.setSentDate(new Date());
        BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
        mdp.setContent(tcontent,"text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式tcontent为邮件内容
        Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对
        //象(事实上可以存放多个)
        mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
        message.setContent(mm);//把mm作为消息对象的内容

        message.saveChanges();
        Transport transport=s.getTransport("smtp");
        transport.connect("smtp.163.com","daida","789-jik");//发邮件人帐户密码,此外是我的帐户密码,使用时请修改。
        transport.sendMessage(message,message.getAllRecipients());
        transport.close();
    }       
   }
      catch (Exception e)
      {
    e.printStackTrace();
   }       
     }    
 }
}

 

该定时器在web.xml中的配置为:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


 <listener>
        <listener-class>cachay.saga.utils.MyTimerTask</listener-class>
    </listener> 

</web-app>

 

至此,所有操作均已完成,good luck !

  • lib.rar (378.4 KB)
  • 下载次数: 188
分享到:
评论
6 楼 田文杰 2015-08-18  
怎么调用这个类呢,看的是不是很明白
5 楼 a8928959 2012-07-12  
4 楼 seraph炽 2012-05-28  
嗯,不错。。。可以实现定时发送邮件!
3 楼 aa00aa00 2012-01-13  
恩,这个例子不错,可以实现定时发送邮件,我也正考虑用spring的定时框架Quartz来发送邮件,一楼说lib没有用到activation.jar   mail.jar,纯粹胡扯,你用javamail发送邮件不用这2个包啊,呵呵!!
2 楼 fuanyu 2011-10-30  
顶一个给你。。
1 楼 dongbiying 2011-08-04  
没有用到那两个jar 呀 。。。

相关推荐

    java定时器定时调用任务

    Java定时器定时调用任务是Java编程中一个重要的功能,它允许开发者在特定的时间间隔执行某项任务,比如定期检查数据库、发送邮件或者执行维护操作等。Java中的定时任务实现通常涉及`java.util.Timer`类和`java.util....

    java web定时器例子

    Java Web定时器主要指的是在Java Web应用程序中实现定时任务的功能,这在许多业务场景中都是必要的,例如数据备份、报表生成、邮件发送等。在Java中,我们可以利用内置的`java.util.Timer`类或者Spring框架的`@...

    JAVA定时器JAVA定时器.pdf

    在使用JAVA定时器时,需要注意以下几点: * 在中不能够设置default-lazy-init="true",否则定时任务不触发。 * 在中不能够设置default-autowire="byName"的属性,否则后台会报org.springframework.beans.factory....

    java定时器(定时任务)

    Java定时器,也被称为Java定时任务,是Java编程语言中用于执行预定任务的重要工具。它允许程序员设置在未来某个时间点或按照一定周期执行特定代码,从而实现自动化操作。在Java中,有两个主要类用于实现定时任务:`...

    java 定时 发送 信息类似于闹钟

    在Java编程中,实现定时发送信息的功能,可以利用Java的定时任务处理库,例如`java.util.Timer`类或`java.util.concurrent.ScheduledExecutorService`。这些工具可以帮助我们创建一个类似于闹钟的服务,按照预设的...

    Java定时器

    本文将深入探讨Java定时器的原理与应用,通过实例演示如何使用`java.util.Timer`和`java.util.TimerTask`类来创建和管理定时任务。 #### 二、Java定时器基础 ##### 1. `java.util.Timer`类 `Timer`类位于`java....

    java定时器Timer

    - 定时发送邮件或短信通知。 - 清理缓存或日志文件。 总结来说,Java定时器`Timer`是一个实用的工具,可以方便地实现定时任务调度,但在高并发场景下,由于其单线程模型,可能需要考虑使用更高级的并发工具,如`...

    Java通过Exchange协议发送和接收邮件

    - 定时任务:通过定时器定期检查新邮件,而不是实时轮询,以减少不必要的请求。 总之,通过Java结合Exchange协议,我们可以构建高效且可靠的邮件系统,实现与Exchange服务器的无缝交互,无论是发送商业邮件、自动化...

    java写定时任务,定时任务、定时器详细示例

    Java中的定时任务与定时器是实现自动化操作的关键技术之一,特别是在需要周期性执行某些功能的场景下,如数据同步、日志清理、定时发送邮件等。本文将深入探讨如何使用Java标准库中的`java.util.Timer`和`java.util....

    java_Timer定时器实例_Spring实例

    标题与描述均提到了“Java_Timer定时器实例_Spring实例”,这表明文章主要讨论的是如何在Java中使用Timer类创建定时任务,并将其整合到Spring框架中。以下是对该主题的详细解析: ### Java中的Timer定时器 #### ...

    java定时器

    在Java应用程序中,我们常常会用到这些功能,比如数据同步、定时发送邮件、定期检查更新等。 `java.util.Timer`类是定时器类,它可以安排多个任务,并按照预定的时间间隔或时间点执行。创建一个Timer对象后,可以...

    spring java 定时器 执行两次 quartz

    在Spring框架中,定时任务是常见的需求,例如用于执行定期数据同步、日志清理或发送邮件等。Quartz是一款强大的开源任务调度库,它能够与Java应用程序无缝集成,实现复杂的时间触发任务。当我们遇到Spring定时器执行...

    java简易的定时器

    Java提供了`java.util.Timer`类来实现定时器功能,通过创建`Timer`实例并结合`TimerTask`子类,可以轻松实现定时任务的调度。 #### 二、定时器类(`Timer`) 在Java中,`Timer`类是核心组件,用于调度定时任务。它...

    java发送邮件

    在定时发送邮件的情况下,你可以结合Java的定时任务框架,如`java.util.Timer`或`java.util.concurrent.ScheduledExecutorService`,来定期执行邮件发送任务。例如,你可以创建一个定时器任务,每隔一段时间检查是否...

    java定时器的实现

    例如,定期清理缓存、定时发送邮件或执行数据同步等操作。Java提供了多种方式来实现定时任务,其中之一就是利用内置的`java.util.Timer`类。本文将详细介绍如何使用`Timer`类结合`ServletContextListener`接口来实现...

    定时器的原理及使用

    定时器在软件开发中扮演着重要的角色,尤其是在需要定期执行某些任务的场景下,如监控、数据备份、任务调度等。Java 提供了 `java.util...这种机制在许多实际应用场景中都非常实用,如监控、数据同步、定时邮件发送等。

    timer定时器(java)

    它主要用于处理那些需要定期执行的任务,比如更新用户界面、发送电子邮件通知等场景。通过`Timer`类,可以方便地创建并管理这些定时任务。 #### 示例代码解析 给定的示例代码展示了如何使用`Timer`类来创建一个...

Global site tag (gtag.js) - Google Analytics