最近帮同学做一个系统 涉及到email的定时发送现在我已经知道如何发送一封简单的email了我想请教一下: 如何实现 “定时”??ps: 代码是次要的, 望大家把思想给指点一下 ,另外该系统大约每天发送数万条,效率不要太低, 最好是半个小时或者更短的时间内搞定,别到第二天了第一天的email还没发送完谢谢

解决方案 »

  1.   

    可以写一个Service来定时发送。还可以在windows下创建任务计划排程定时发送。
      

  2.   

    spring 中的。定时器 可以用一下能满足你的需求的你让什么时候发送 就什么时候发送。呵呵有兴趣的话 可以去 研究一下。。
      

  3.   

    也可以用js來控制,每隔多长时间,也可以用spring的定时任务功能,很好用!
      

  4.   

    用Spring 的quartz定时任务框架,只要稍微配置一下就ok 一秒钟一封都可以
      

  5.   

    可以写一个Service来定时发送。========哥们 怎么写 service ? 另外这个系统应该是部署在linux下的
      

  6.   

    LZ,系统里没用到spring,就直接用quartz,quartz可以单独运行的你去官网下个quartz的全包,里面有10多个DEMO,基本上,可以直接修改用的。因为实在很简单
      

  7.   


    嗯 , 问题是系统不是用java写的。 汗一个。。没相当大家给的解决思想都是具体的技术方案 
      

  8.   

    定时的功能可以在不同层面上来实现,看你自己怎么选择。linux下面可以用crontab管理设置定时任务。java里面也可以,比如用上面讲到Timer类。中间件也有定时器支持。另外,系统不是java写的,为什么问题在java se版?
      

  9.   

    可以写java类来发送email,在Linux下配定时任务。
      

  10.   


    了然。实现定时任务,分两块:第一,定时,已经讲过,可以在不同层面上来实现,看你自己怎么选择,具体实现LZ要自己查文档。第二,任务本身,在这里是发邮件,这个你自己已经了然,可以看看 http://commons.apache.org/email/原理应该就这些了,再细就到代码层面上了 :)
      

  11.   

    定时器吧。quartz用起来稍微复杂点,你可以用jdk自带的Timer
    或者起一个Thread,sleep指定的时间后激活就ok了
      

  12.   


    呵呵, 我昨晚也测了下 半小时发万封  不太可能啊。
    我用代理服务器发的, 用的腾讯的
    用我的qq给我自身发, 在我收件箱里啊 
    然后往我 gmail里发了封 也是 收件箱。  就这些了
    不过具体的部署起来我就不太了解那边的情况了。 我只帮我同学在代码层面上写一个接口
    到时候他直接用就是了
      

  13.   


    这个思想不错。  昨晚用php实现的 , 原理跟你说的差不多
      

  14.   

    用纯java代码 
    同时跑上50个线程 
    把所有的邮件放到hashmap中 然后用定时发送的时间作为 key
    线程要做的就是 对map按照时间进行 get 就行了
    把get出来的发送出去按你说的 半小时就算发送 9000封
    也就是500毫秒发送一封量不算太大50个线程都有点多  
      

  15.   

    给你个例子吧,这是我定时执行任务的一段程序:
             /**
     * 加载自动注册任务线程
     */
    private void initAutoRegister(){
    AutoRegister autoRegister = new AutoRegister();
    Timer autoTimer = new Timer("autoRegister");
    autoTimer.schedule(autoRegister, 0,60*60*1000);
    }
    public class AutoRegister extends TimerTask {
    Logger logger = Logger.getLogger(AutoRegister.class); @Override
    public void run() {
    RegisterSites registerSites = RegisterSites.getInstance();
    String autotime = registerSites.getAutotime();
    String useable = registerSites.getUseable();
    if (autotime != null && autotime.trim().length() > 0 && useable != null
    && useable.equals("true")) {
    String[] time = autotime.split(":");
    Calendar calendar = Calendar.getInstance();
    int hour = Integer.parseInt(time[0].trim());
    calendar.set(Calendar.HOUR_OF_DAY, hour);
    if (time.length > 1) {
    int mimute = Integer.parseInt(time[1]);
    calendar.set(Calendar.MINUTE, mimute);
    }
    Date now = new Date();
    long nowtime = now.getTime();
    Date excuDate = calendar.getTime();
    long preparetime = excuDate.getTime();
    if (preparetime <= nowtime) {// 如果时间到达了设定时间则执行发布任务
    logger.info("开始制定注册账号任务");
    RegistersiteDAO registersiteDAO = new RegistersiteDAO();
    int result = registersiteDAO.updateRegsiter();//布置注册任务
    if(result>0){
    logger.info("自动注册账号任务制定成功");
    }

    }
    }
    }}
            
      

  16.   

    推荐用quartz
    其他java.util.Timer
    spring