Spring的任务调度发送邮件

8.1.1任务调度简介

       Spring包含了对定时调度服务的内置支持类。当前,Spring支持从JDK1.3开始内置的Timer类和Quartz Scheduler。二者都可以通过FactoryBean,分别指向TimerTrigger实例的引用进行配置。更进一步,有个对Quartz SchedulerTimer都有效的工具类可以让你调用某个目标对象的方法(类似通常的MethodInvokingFactoryBean操作)。Spring 还包含有用于线程池调度的类,它针对Java 1.3,1.4,5JEE环境的差异都进行了抽象。

8.1.2 Spring中使用Quartz

Quartz 是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SEJ2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。而在日常开发中我们也是优先使用Quartz进行计划任务的调度。

Scheduler代表一个Quartz的独立运行容器我们的任务需要由它来进行执行,请看下面的代码清单

代码清单1

<bean id="scheduler" class="org.springframework.scheduling.quartz.

 SchedulerFactoryBean">

    <property name="triggers">

        <list>

           <ref local="estimateLogTriggerQuartz" />

       </list>

    </property>

</bean>

<!—- 配置触发器调度的Bean -->

<bean id="estimateLog" class="org.springframework.scheduling.quartz.

MethodInvokingJobDetailFactoryBean">

<!-- 引用一个Bean -->

<property name="targetObject" ref="estimateLogTrigger" />

<!-- 指定目标Bean的方法 -->   

<property name="targetMethod" value="doSaveEstimateLog" />

</bean>

<!—- 配置触发器 -->

<bean id="estimateLogTriggerQuartz" class="org.springframework.scheduling.quartz. CronTriggerBean">

    <property name="jobDetail" ref="estimateLog" />

<!-- 每月最后一天23.55执行 -->

    <property name="cronExpression" value="0 55 23 L * ?" />

</bean>

代码清单1中配置了一个名为SchedulerFactoryBeanCronTriggerBeanMethodInvokingJobDetailFactoryBeanBean这是Spring为了降低Quartz的使用难度,为创建QuartzSchedulerTriggerJobDetail提供了便利的FactoryBeanSchedulerFactoryBeantriggers的属性为triggers[]类型,可以通过该属性注册多个TriggerBean estimateLogTriggerQuartz定义了jobDetail执行的时间和执行的方法。定义触发器执行的就是0 55 23 L * ? 这段表达式,这个表达式定义了在每月的最后一天L2355执行。

8.2 Spring的邮件支持

       8.2.1Spring邮件的简介

Spring提供了一个发送电子邮件的高级抽象层,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。Springorg.springframework.mail.javamail包下提供了对JavaMail邮件系统的支持,通过这些支持类,编写JavaMail邮件发送程序变得轻松易行。

1)发送普通邮件

       代码清单1

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;

 

public class SendMail {

     public static void main(String args[]){

        JavaMailSenderImpl senderimpl = new JavaMailSenderImpl();

        Properties properties = new Properties();

        properties.setProperty("mail.smtp.auth", "true");

        senderimpl.setJavaMailProperties(properties);

        // 设定mail server

        senderimpl.setHost("smtpcom.263xmail.com");

         //设置用户名和密码

         senderimpl.setUsername("tony");

         senderimpl.setPassword("tony");

         //建立邮件消息

         SimpleMailMessage mailmessage = new SimpleMailMessage();

         //设置收件人

         String[] array = new String[]{"myMail@163.com",

"yourMail@263.com"};

         mailmessage.setTo(array);

         //设置寄件人

         mailmessage.setFrom("myMail@163.com");

         //设置邮件主题

         mailmessage.setSubject("Test");

         //设置邮件内容

         mailmessage.setText("Test Send Mail");

         //发送邮件

         senderimpl.send(mailmessage);

         System.out.println("Send success.....");

    }

}

代码清单1中首先初始化了一个JavaMailSenderImpl实例,然后设置邮件服务器的端口地址,发送人的帐户和密码。SimpleMailMessage对象代表了邮件信息,包含一系列的属性。通过代码清单1我们可以很方便的发送一封邮件或者群发邮件。下面再介绍一下发送HTML格式的邮件。

    2)发送HTML邮件

    代码清单2

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;

import org.springframework.mail.javamail.MimeMessageHelper;

public class SendMail {

     public static void main(String args[]){

        JavaMailSenderImpl senderimpl = new JavaMailSenderImpl();

        Properties properties = new Properties();

        properties.setProperty("mail.smtp.auth", "true");

        senderimpl.setJavaMailProperties(properties);

        // 设定mail server

        senderimpl.setHost("smtpcom.263xmail.com");

         //设置用户名和密码

         senderimpl.setUsername("tony");

         senderimpl.setPassword("tony");

         //建立邮件消息

         MimeMessage mimeMessage = senderimpl.createMimeMessage();

         MimeMessageHelper messagehelper = new MimeMessageHelper(mimeMessage);

         try {

           //设置寄件人

           messagehelper.setFrom("myMail@163.com");

           //设置收件人

           messagehelper.setTo("yourMail@163.com");

           //设置邮件主题

           messagehelper.setSubject("Test HTML");

           //true 表示启动HTML格式的邮件

           messagehelper.setText("<html><head></head><body>Hello World ! </body></html>",true);

           } catch (MessagingException e) {e.printStackTrace();}

         //发送邮件

         senderimpl.send(mimeMessage);

         System.out.println("Send success.....");

    }

}

    根据代码清单2我们可看到只需要简单的设置

messagehelper.setText("<html><head></head><body>

Hello World ! </body></html>",true);第二个参数为true就可以发送HTML格式的邮件。

    3)发送含有附件和内嵌文件的邮件

    代码清单3

import java.io.IOException;

import java.util.Properties;

 

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

 

import org.springframework.core.io.ClassPathResource;

import org.springframework.mail.javamail.JavaMailSenderImpl;

import org.springframework.mail.javamail.MimeMessageHelper;

public class SendMail {

    public static void main(String args[]) throws MessagingException,

           IOException {

       JavaMailSenderImpl senderimpl = new JavaMailSenderImpl();

       Properties properties = new Properties();

       properties.setProperty("mail.smtp.auth", "true");

       senderimpl.setJavaMailProperties(properties);

       // 设定mail server

       senderimpl.setHost("smtpcom.263xmail.com");

       // 设置用户名和密码

       senderimpl.setUsername("*****@crimsonlogictj.com");

       senderimpl.setPassword("*****");

       // 建立邮件消息

       MimeMessage mimeMessage = senderimpl.createMimeMessage();

 

MimeMessageHelper messagehelper =

new MimeMessageHelper(mimeMessage, true, "UTF-8");

       // 设置寄件人

       messagehelper.setFrom("*****@crimsonlogictj.com");

       // 设置收件人

       messagehelper.setTo("*****@crimsonlogictj.com");

       // 设置邮件主题

       messagehelper.setSubject("Test HTML");

       // true 表示启动html格式的邮件

       messagehelper.setText(

           "<html><head></head><body>" +

           "<img src=/"cid:img1/"></img>" +

//HTML文本中嵌入了一个名为 cid:img1 的图片

           "<h1>Hello World</h1></body></html>",

           true);

       //定义图片

       ClassPathResource img = new ClassPathResource("01.jpg");

       //定义附件1

       ClassPathResource file2 = new ClassPathResource("02.jpg");

       //定义附件2

       ClassPathResource file3 = new ClassPathResource("03.jpg");

       //将图片加入

       messagehelper.addInline("img1", img.getFile());

       //将附件1加入

       messagehelper.addAttachment(file2.getFile().getName(),

file2.getFile());

       //将附件2加入

       messagehelper.addAttachment(file3.getFile().getName(),

                                   file3.getFile());

       // 发送邮件

       senderimpl.send(mimeMessage);

       System.out.println("Send success.....");

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值