无聊下载了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(); } } }