无聊下载了quartz的jar包,配置了一个在spring框架下的定时操作,发送一封邮件玩玩吧
列出来使用的jar包:
commons-collections-3.2.jar
commons-logging.jar
spring-2.5.1.jar
quartz-all-1.6.5.jar
mail.jar
activation.jar
说明:
1。如果使用MyEclipse来添加spring2.5的支持,默认添加的是分类别的jar包,省事的话就使用这种综合包吧。如果spring使用的不是2.5版本,需要手动拷贝一个spring-context-support.jar文件到lib目录下面。另外,由于使用commons-collections-3.2.jar,为了防止jar包冲突,将项目源代码lib中的commons-collections-2.1.1删掉。
2。我没有使用javaee.jar包,因为这只是一个示范项目,没那么麻烦。正式的web项目可能会使用javaee.jar,这样与JavaMail的jar包又会冲突了,方法是把javaee.jar里面的mail和activation目录删掉,使用独立的jar包。原项目里的目录大概是在eclipse下面的Genuitec\Common\plugins目录里,搜一下javaee.jar
3。mail.jar和activation.jar的下载地址:
http://java.sun.com/products/javamail/downloads/index.html
http://java.sun.com/products/javabeans/jaf/downloads/index.html
下载javamail-1.4.3.zip和jaf-1_1_1.zip两个包,取其中的mail.jar和activaction.jar即可。
第一步,在web.xml文件中添加spring支持
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
第二步,在spring的上下文中添加quartz配置信息
下面的配置就是说在每天的早晨6点执行SayHello类中的sayHello方法
<bean id="sayHello" class="test.SayHello" />
<bean id="reportTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="sayHello" />
<property name="targetMethod" value="say" />
<property name="concurrent" value="false" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reportTask" />
<property name="cronExpression" value="0 0 6 * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
第三步,就是编写SayHello类中的sayHello方法,调用发送邮件的任务
SayHello.java
package test;
public class SayHello {
public void say(){
System.out.println("-----------发送邮件!---------");
sendMail();
System.out.println("-----------发送成功!---------");
}
public void sendMail() {
try {
Properties props = new Properties();
Session sendsession;
Transport transport;
// 向属性中写入SMTP服务器的地址
props.put("mail.smtp.host", "smtp.163.com");
// 设置SMTP服务器需要权限认证
props.put("mail.smtp.auth", "true");
// 设置输出调试信息
sendsession = Session.getInstance(props, null);
sendsession.setDebug(true);
// 根据Session生成Message对象
Message message = new MimeMessage(sendsession);
// 设置发信人地址
message.setFrom(new InternetAddress("发件人"));
// 设置收信人地址
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
"收件人"));
// 设置E-mail标题
message.setSubject("标题");
// 发送html格式的邮件
// 新建一个存放信件内容的BodyPart对象
BodyPart mdp = new MimeBodyPart();
// 给BodyPart对象设置内容和格式/编码方式
mdp.setContent("内容", "text/html;charset=gb2312");
// 新建一个MimeMultipart对象用来存放BodyPart对(事实上可以存放多个)
Multipart mm = new MimeMultipart();
// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
mm.addBodyPart(mdp);
// 设置E-mail内容
message.setContent(mm);
// 保存对于E-mail的修改
message.saveChanges();
// 根据Session生成Transport对象
transport = sendsession.getTransport("smtp");
// 连接到SMTP服务器
transport.connect("smtp.163.com", "发件人邮箱", "密码");
// 发送E-mail
transport.sendMessage(message, message.getAllRecipients());
// 关闭Transport连接
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}