java配合使用quartz发送邮件

先创建一个自己的邮箱,已qq为例在设置里开启了SMTP发送方式,然后会生成一个密码,下面的代码用到的密码,就是这给定的密码

1. 导入依赖

<!-- 引入quartz对应的依赖 -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.3</version>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.3</version>
</dependency>
<!--引入mail依赖-->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

 2.写一个发邮件的作业类,跟springmvc配置文件里相对应

package com.itheima.jobs;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.annotation.Resource;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.itheima.bos.dao.IWorkbillDao;
import com.itheima.bos.domain.Workbill;
public class MailJob {

         @Resource

         private IWorkbillDao workbillDao;  //我这是想要发送数据库的数据所以注入了dao,如果想发送别的可以不注入

        //在这之前先创建自己的邮箱和查找到自己邮箱对应的服务

         private String username;//发件人的邮箱账号

         private String password;//密码  这儿的密码就是一开始申请的密码

         private String smtpServer;//服务器   例如qq邮箱就百度查找其对应的服务,都是固定的

         public String getUsername() {

                   return username;

         }

         public void setUsername(String username) {

                   this.username = username;

         }

         public String getPassword() {

                   return password;

         }

         public void setPassword(String password) {

                   this.password = password;

         }

         public void execute() {

                   System.out.println("要发邮件了。。。" + new Date());

                   try {

                            //查询工单类型为新单的所有工单

                            List<Workbill> list = workbillDao.findAll();

                            if(null != list && list.size() > 0){

                                   //这块不用改固定的就可以

                                     final Properties mailProps = new Properties();

                                     mailProps.put("mail.smtp.host", this.getSmtpServer());

                                     mailProps.put("mail.smtp.auth", "true");

                                     mailProps.put("mail.username", this.getUsername());

                                     mailProps.put("mail.password", this.getPassword());



                                     // 构建授权信息,用于进行SMTP进行身份验证

                                     Authenticator authenticator = new Authenticator() {

                                               protected PasswordAuthentication getPasswordAuthentication() {

                                                        // 用户名、密码

                                                       //下面这两行也不用动,从上面的properties里获取出来的

                                                        String userName = mailProps.getProperty("mail.username");

                                                        String password = mailProps.getProperty("mail.password");

                                                        return new PasswordAuthentication(userName, password);

                                               }

                                      };

                                     // 使用环境属性和授权信息,创建邮件会话

                                     Session mailSession = Session.getInstance(mailProps, authenticator);

                                     for(Workbill workbill : list){

                                               // 创建邮件消息

                                               MimeMessage message = new MimeMessage(mailSession);

                                               // 设置发件人

                                               InternetAddress from = new InternetAddress(mailProps.getProperty("mail.username"));

                                               message.setFrom(from);

                                               // 设置收件人

                                               InternetAddress to = new InternetAddress("[email protected]");//把这改成你要发送人的邮箱

                                               message.setRecipient(RecipientType.TO, to);

                                               // 设置邮件标题

                                               message.setSubject("系统邮件:新单通知");//标题可以自己起

                                               // 设置邮件的内容体

                                               message.setContent(workbill.toString(), "text/html;charset=UTF-8");//内容也可以自己写

                                               // 发送邮件

                                               Transport.send(message);

                                     }

                            }

                   } catch (Exception ex) {

                            ex.printStackTrace();

                   }

         }



         public String getSmtpServer() {

                   return smtpServer;

         }



         public void setSmtpServer(String smtpServer) {

                   this.smtpServer = smtpServer;

         }

}

 

3.在spring配置文件中配置

<!-- 注册自定义作业类 -->

         <bean id="myJob" class="com.itheima.jobs.MailJob">

                   <property name="username" value="[email protected]"/>    

                   <property name="password" value="147963qP"/>

                   <property name="smtpServer" value="smtp.126.com"/>

         </bean>

        

         <!-- 配置JobDetail -->

         <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

                   <!-- 注入目标对象 -->

                   <property name="targetObject" ref="myJob"/>

                   <!-- 注入目标方法 -->

                   <property name="targetMethod" value="execute"/>

         </bean>

        

         <!-- 配置触发器 -->

         <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

                   <!-- 注入任务详情对象 -->

                   <property name="jobDetail" ref="jobDetail"/>

                   <!-- 注入cron表达式,通过这个表达式指定触发的时间点 -->   

               // 下面这个表达式百度查就可以有工具就是多长时间发送一次,就是定时器的意思

                   <property name="cronExpression">

                            <value>0/5 * * * * ?</value>

                   </property>

         </bean>

        

         <!-- 配置调度工厂 -->

         <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

                   <!-- 注入触发器 -->

                   <property name="triggers">

                            <list>

                                     <ref bean="myTrigger"/>

                            </list>

                   </property>

         </bean>

 

猜你喜欢

转载自blog.csdn.net/kxj19980524/article/details/84307897