前提是用maven搭建好Spring配置:
1、版本号以及依赖:
<!--这是限定版本-->
<properties>
<spring.version>4.1.3.RELEASE</spring.version>
</properties>
<dependencies>
<!--测试单元要不要都行-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- Quartz 2.2.1 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<!--发送Email 所需类库包 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>
2、起一个包建一个作业类,类里写:
public void run() throws ParseException, MessagingException {
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("classpath:Spring/applicationContext.xml");
JavaMailSenderImpl javaMailSender =(JavaMailSenderImpl) applicationContext.getBean("mailSender");
//创建带附件的邮件对象
MimeMessage mimeMsg = javaMailSender.createMimeMessage();
//是否采用多功能邮件模式,有图片、文字
MimeMessageHelper mimeMessageHelperher = new MimeMessageHelper(mimeMsg, true);
mimeMessageHelperher.setFrom("[email protected]"); //发送方邮箱
mimeMessageHelperher.setTo("[email protected]");//接收方邮箱
mimeMessageHelperher.setSubject("使用spring定时发送的邮件:");//邮件名字
mimeMessageHelperher.setText("喂喂,八点啦,起床,够钟翻工!");
//指定发送文件位置
File f1=new File("D:\\files\\IO练习文件\\photo\\40576.jpg");
File f2=new File("D:\\files\\IO练习文件\\photo\\38311.jpg");
//只发送文件
mimeMessageHelperher.addAttachment("40576.jpg", f1);
mimeMessageHelperher.addAttachment("38311.jpg", f2);
//发送邮件
javaMailSender.send(mimeMsg);
String currentDaten = new Date().toString();
//打印每次执行后的时间
System.out.println("send ok:"+new SimpleDateFormat("yyyy-MM-dd").parse(currentDaten));
}
3、建一个applicationContext.xml文件,里面写:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://code.alibabatech.com/schema/dubbo
http://www.springframework.org/schema/context">
<!--配置作业类,不需要配置Job接口-->
<bean id="myJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--目标对象引入作业类,就是刚创建那个类-->
<property name="targetObject">
<bean class="com.offcn.test.HelloJob" />
</property>
<!--作业类里方法的名字-->
<property name="targetMethod" value="run" />
<!-- 作业不并发调度 -->
<property name="concurrent" value="false" />
</bean>
<!--配置jobDetail ,需要工作类实现Job接口,这里我们不需要-->
<!--<bean id="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.offcn.test.HelloJob">
</property>
<property name="name" value="job3"></property>
<property name="group" value="g3"></property>
</bean>-->
<!--配置作业调度触发器CronTrigger-->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myJob" />
<property name="cronExpression" value="1 0 8 * * ?" /><!-- 每天8点发送一条信息 -->
</bean>
<!--配置调度中心Scheduler-->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
<!--配置spring邮件核心的抽象接类-->
<!-- Spring提供的发送电子邮件的高级抽象类 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<!-- 邮件smtp服务器地址,每种邮箱的smtp不一样的 -->
<property name="host" value="smtp.qq.com" />
<!-- 邮箱用户名 -->
<property name="username" value="[email protected]" />
<!-- 邮箱密码,就是自己qq的邮箱授权码,自己去qq邮箱开启smtp就会收到一个码 -->
<property name="password" value="xxxxxxxxxxxxxxxx" />
<!-- 编码格式 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 邮箱服务器属性设置 -->
<property name="javaMailProperties">
<props>
<!-- 邮箱服务器是否支持验证 -->
<prop key="mail.smtp.auth">true</prop>
<!-- 邮箱服务器连接超时时间 毫秒-->
<prop key="mail.smtp.timeout">300000</prop>
</props>
</property>
</bean>
</beans>
4、创建一个启动类:
//这里只会启动一次,作业类才会重复打印输出
public static void main(String[] args) {
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
System.out.println("这是定时发送邮件的启动类:"+new Date());
}
5、run一下就看到打印了,注意一定要用main方法启动,不要用单元测试,否则报错。