1. 程式人生 > >java配合使用quartz傳送郵件

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>