Quartz+JavaMail傳送郵件
阿新 • • 發佈:2019-01-10
Quartz+JavaMail
第一步:在pom.xml中引入quartz和JavaMail的依賴
<!-- 引入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> <!-- 引入JavaMail的依賴 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency>
第二步:提供一個作業類,用於為系統管理員傳送郵件
package com.company.bos.action; 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.company.bos.WorkbillDao; import com.company.bos.pojo.Workbill; /** * 傳送郵件的作業 * @author zhaoqx * */ public class MailJob { @Resource private WorkbillDao workbillDao; private String username;//發件人的郵箱賬號 private String password;//密碼 private String smtpServer;//伺服器 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() { // 使用者名稱、密碼 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; } }
第三步:在spring配置檔案中配置
<!-- 註冊自定義作業類 -->
<bean id="myJob" class="com.company.bos.action.MailJob">
<property name="username" value="1760077****@163.com"/>
<property name="password" value="wu2222"/>
<property name="smtpServer" value="smtp.163.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>
問題
javax.mail.AuthenticationFailedException
想要通過郵箱伺服器傳送郵件一定要通過授權,獲得授權碼才可以通過該郵箱來發送郵件。