定时发送邮件小程序

之前写过一篇用JAVA实现邮件发送的博客,那个使用起来比较麻烦,可以参考文章:java实现邮件发送
今天看到了Spring为我们简化了这些步骤,下面来介绍如何使用Spring和quartz来实现邮件定时发送功能。

项目架构:

 

发送邮件的服务接口:

package com.sunflower.service;

/**
 * @author Caihanyuan
 * @time 2012-10-28 上午09:55:15
 */
public interface SendMailService {
    public void sendMail();
}

 

发送邮件的服务实现类:

 1 package com.sunflower.serviceimp;
 2 
 3 import java.util.ResourceBundle;
 4 
 5 import org.springframework.mail.SimpleMailMessage;
 6 import org.springframework.mail.javamail.JavaMailSenderImpl;
 7 
 8 import com.sunflower.service.SendMailService;
 9 
10 /**
11  * @author Caihanyuan
12  * @time 2012-10-28 上午10:01:18
13  */
14 public class SendMailServiceImp implements SendMailService {
15     private JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
16 
17     public JavaMailSenderImpl getMailSender() {
18         return mailSender;
19     }
20 
21     public void setMailSender(JavaMailSenderImpl mailSender) {
22         this.mailSender = mailSender;
23     }
24 
25     private void getHostInformation() {
26         ResourceBundle resource = ResourceBundle.getBundle("mailhost");
27         mailSender.setHost(resource.getString("hostname"));
28         mailSender.setPort(Integer.valueOf(resource.getString("hostport")));
29         mailSender.setUsername(resource.getString("username"));
30         mailSender.setPassword(resource.getString("password"));
31     }
32 
33     @Override
34     public void sendMail() {
35         getHostInformation();
36         SimpleMailMessage simpleMessage = new SimpleMailMessage();
37         simpleMessage.setTo("1****@139.com");
38         simpleMessage.setFrom(mailSender.getUsername());
39         simpleMessage.setSubject("老师您好");
40         simpleMessage.setText("老师你好,我的作业已经提交了,请查看");
41 
42         mailSender.send(simpleMessage);
43     }
44 }

到目前为止,一个发送邮件的服务已经建立好了,而且可以运行,这里使用的是简单的邮件类型。Spring为我们提供了org.springframework.mail.javamail.JavaMailSenderImpl类,它封装了发送邮件的步骤,让我们使用起来更加简单。org.springframework.mail.SimpleMailMessage是简单邮件的封装类,如果要发送更复杂的邮件类型,要使用javax.mail.internet.MimeMessage类和org.springframework.mail.javamail.MimeMessageHelper类。如何进行各种邮件类型的发送,请查看怎样使用Spring发邮件一文。
JavaMailSenderImpl的邮件发送功能是建立在JavaMail基础之上的,所以要导入mail.jar包 。

 

使用调度器对这个邮件发送服务进行调度:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 5 
 6     <bean id="javaMailSenderImp" class="org.springframework.mail.javamail.JavaMailSenderImpl"></bean>
 7 
 8     <bean id="sendMailService" class="com.sunflower.serviceimp.SendMailServiceImp">
 9         <property name="mailSender">
10             <ref bean="javaMailSenderImp" />
11         </property>
12     </bean>
13 
14     <!-- 被触发器调用,指定被调用的方法 -->
15     <bean id="sendJob"
16         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
17         <property name="targetObject">
18             <ref bean="sendMailService" />
19         </property>
20         <property name="targetMethod">
21             <value>sendMail</value>
22         </property>
23     </bean>
24 
25     <!--一个简单的触发器-->
26     <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
27         <property name="jobDetail" ref="sendJob" />
28         <!-- 在调度程序启动多少毫秒后启动任务 -->
29         <property name="startDelay" value="1" />
30         <!-- 表示每隔多少毫秒启动 -->
31         <property name="repeatInterval" value="180000" />
32     </bean>
33 
34 
35     <!--一个定时的触发器-->
36     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
37         <property name="jobDetail" ref="sendJob" />
38         <!-- 指明每天早上6点启动任务,表达式的解释见下篇文章 -->
39         <property name="cronExpression" value="0 0 6 * * ?" />
40     </bean>
41     
42     <!-- 调度器 -->
43     <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
44         <property name="triggers">
45             <list>
46                 <ref bean="simpleTrigger" />
47             </list>
48         </property>
49     </bean>
50 </beans>

------------------------------------

在定时触发器中<property name="cronExpression"/>属性指定何时进行触发。
一个cron表达式有至少6个(也可能7个)由空格分隔的时间元素。从左到右,这些元素的定义如下:
1.秒(0~59)
2.分钟(0~59)
3.小时(0~23)
4.月份中的日期(1~31)
5.月份(1~12或者JAN~DEC)
6.星期中的日期(1~7或者SUN~SAT)
7.年份(1970~2099)
每一个元素都可以显式地规定一个值(如5),一个区间(如5-12),一个列表(如4,7,10),或一个通配符(如*)。“月份中的日期”和“星期中的日期”这两个元素是互斥的。因此通过设置一个问号(?)来表示你不想设置的那个字段。

------------------------------------

要使用quartz实现定时操作,需要下载quartz的jar包。

 

定时定时发送的测试:

 1 package com.sunflower.maintest;
 2 
 3 import org.quartz.SchedulerException;
 4 import org.quartz.impl.StdScheduler;
 5 import org.springframework.context.ApplicationContext;
 6 import org.springframework.context.support.ClassPathXmlApplicationContext;
 7 
 8 /**
 9  * @author Caihanyuan
10  * @time 2012-10-28 下午02:37:10
11  */
12 public class SendMailTest {
13     public static void main(String[] args) {
14         ApplicationContext context = new ClassPathXmlApplicationContext(
15                 "applicationContext.xml");
16         StdScheduler scheduler = (StdScheduler) context.getBean("scheduler");
17         
18         try {
19             scheduler.start();
20         }
21         catch (SchedulerException e) {
22             e.printStackTrace();
23         }
24     }
25 }

 

项目源码下载

 

转载于:https://www.cnblogs.com/hanyuan/archive/2012/10/28/2743698.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值