1. 程式人生 > >使用Spring、Quarzt傳送定時qq郵件:

使用Spring、Quarzt傳送定時qq郵件:

前提是用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方法啟動,不要用單元測試,否則報錯。