java配合使用quartz傳送郵件
阿新 • • 發佈:2018-11-23
先建立一個自己的郵箱,已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>