使用Spring、Quarzt傳送定時qq郵件:
阿新 • • 發佈:2018-11-21
前提是用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方法啟動,不要用單元測試,否則報錯。