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>
 <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
 <version>4.3.10.RELEASE</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("test@itcast.cn");//把这改成你要发送人的邮箱

                                               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配置文件中配置

表达式生成器http://cron.qqe2.com/  就是下面备注的那个多长时间执行一次

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

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

                   <property name="username" value="itcast_server@126.com"/>    

                   <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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz 是一个开源的作业调度框架,可以用于在特定时间触发特定作业的执行。在 Java 项目中使用 Quartz,一般需要以下步骤: 1. 引入 Quartz 依赖 在 Maven 项目中,可以在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 创建作业类 创建一个实现 Job 接口的作业类,该类需要实现 execute 方法,用于定义作业执行的逻辑。 ``` public class MyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { // 定义作业执行的逻辑 } } ``` 3. 创建触发器 创建一个触发器,用于指定作业的执行时间。可以使用 Cron 表达式或者简单的时间间隔来定义触发器。 ``` Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .withSchedule( SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build(); ``` 4. 创建调度器 创建一个调度器,并将作业和触发器添加到调度器中。 ``` Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); scheduler.scheduleJob(jobDetail, trigger); ``` 5. 启动调度器 启动调度器,开始执行作业。 ``` scheduler.start(); ``` 以上是使用 QuartzJava 项目中实现作业调度的基本步骤。需要注意的是,Quartz 还提供了很多高级特性,比如支持集群部署、支持持久化作业等。如果需要使用这些特性,可以参考 Quartz 的官方文档进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值