文档章节

Java实现邮件定时发送

华山猛男
 华山猛男
发布于 2014/03/27 17:41
字数 864
阅读 46
收藏 0

首先介绍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>

至此,所有操作均已完成,需要加入activation.jar   mail.jar

本文转载自:http://blog.csdn.net/awj3584/article/details/7863772

华山猛男

华山猛男

粉丝 11
博文 188
码字总数 94011
作品 0
海口
程序员
私信 提问
使用Velocity作为邮件的模板

Velocity 是一个基于Java的模板引擎。它允许任何人使用一种简单但强大的模板语言去引用Java代码中定义的对象。 Velocity的基本常用语法:https://www.cnblogs.com/xiohao/p/5788932.html 最近...

莫在全
06/27
8
0
网站爬虫及模拟下单(Golang/Java, Kafka, mysql)

最好是golang,如果JAVA经验很足,也可以考虑JAVA 一、整体功能需求:网站爬虫处理及post 简单爬虫及模拟下单(post):A爬虫模块:用Java程序模拟登录指定的若干个类似网站,每几分钟定时抓取...

greatLIU
2017/02/26
42
10
Java 发送邮件实现(JavaMail 和 Spring 实现)

Java 实现邮件的发送,使用 JavaMail 和 Spring 实现 一、使用 JavaMail JavaMail 是 Java 处理电子邮件相关的编程接口,但是没有被加在标准的Java开发工具包中(Java Development Kit),所...

非摩尔根
01/17
120
0
Jenkins 教程(一)实现自动化打包及邮件通知

个人不喜欢装腔作势一堆专业术语放上去,让大多数人看不懂来提升逼格(所谓的专家),所以我简单的介绍jenkins是干啥的。本文使用jenkins,就是让它把git仓库里的东西取出来,然后在jenkins容器...

FantJ
2018/05/26
0
0
讨论 Smart Framework 2.0 功能特性

本文是《轻量级 Java Web 框架架构设计》的系列博文。 相信大家经过前面的讨论,已经对 Smart Framework 有所感觉了。它是一个轻量级 Java Web 框架,服务端发布基于 REST 风格的服务接口,客...

黄勇
2013/10/16
2.9K
10

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
640
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
35
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
19
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
65
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
63
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部