使用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方法启动,不要用单元测试,否则报错。

猜你喜欢

转载自blog.csdn.net/weixin_42334396/article/details/84308478