背景:
boss想做一個數(shù)據庫定時查詢,如果查詢出異常結果就將異常信息都發(fā)送到指定郵箱中,于是用到了javaMail,下面就是利用springboot整合javaMail實現(xiàn)該需求。(為了能讓大家更快的完成javaMail的集成,后續(xù)的集成步驟中有關db操作均跳過)
相關源碼下載
集成步驟:
1 設置郵箱smtp服務器,并記錄開啟服務的授權密碼,此部分操作不做贅述,大家可以參考開啟郵箱的smtp服務器(以163郵箱為例)進行操作
2 新建springboot項目,添加web、thymeleaf、javaMail依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dhcc</groupId>
<artifactId>mail_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mail_demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--Thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--javaMail-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 3 項目配置
在application.properties中進行如下配置
server.port=9888
#javaMail配置(下面的 spring.mail.host 為發(fā)送郵箱的郵箱服務器)
spring.mail.host=smtp.163.com
spring.mail.username=xxx@163.com
spring.mail.password=password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
ps:上面提到的spring.mail.host為發(fā)送郵箱的郵箱服務器
- 4 編寫發(fā)送郵件的工具類SendMail
public class SendMail {
//發(fā)送普通文本格式郵件
public static void sendTextMail(MimeMessage message,String username,String recipient,String subject,List<String> content){
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(username);
helper.setTo(recipient);
helper.setSubject(subject);
StringBuffer sb = new StringBuffer();
sb.append(content);
helper.setText(sb.toString());
} catch (MessagingException e) {
e.printStackTrace();
}
}
//發(fā)送html格式郵件
public void sendHtmlMail(MimeMessage message,String username,String recipient, String subject, String content) {
try {
//true表示需要創(chuàng)建一個multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(username);
helper.setTo(recipient);
helper.setSubject(subject);
helper.setText(content, true);
System.out.println("html格式郵件發(fā)送中...");
} catch (MessagingException e) {
System.out.println("html格式郵件發(fā)送失敗!");
}
}
}
}
- 5 編寫service層,調用發(fā)送郵件方法
public interface MailService {
/**
* @Author: hobbes
* @Description: 獲得錯誤領導項目,并發(fā)送提示郵件
* @Date: 創(chuàng)建于 11:53 2018/2/12 0012
* @Param:
* @return
*/
String checkProject();
}
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender javaMailSender;
@Override
public String checkProject(){
try {
SendMail sendMail = new SendMail();
MimeMessage message = javaMailSender.createMimeMessage();
String content = "<html><head><style>td{border:solid #add9c0; border-width:0px 1px 1px 0px; padding:10px 0px;} table{border:solid #add9c0; border-width:1px 0px 0px 1px;}</style></head><body style=''><h3>截止 " + format.format(new Date()) + " 業(yè)績核算系統(tǒng)中錯誤領導項目,項目信息如下:</h3>" +
"<table><tr><th>合同號</th><th>項目名稱</th><th>客戶名稱</th><th>合同總金額(元)</th><th>合同實收款(元)</th><th>簽訂日期</th><th>項目所屬領導</th><th>提交人</th></tr>" +
"<tr><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>" +
"</table></body></html>";
sendMail.sendHtmlMail(message, "郵件發(fā)送者郵箱", "郵件接收者郵箱", "郵件標題", content);
javaMailSender.send(message);
}catch(Exception e){
//跳轉至郵件發(fā)送失敗頁面
return "CheckError";
}
//跳轉至郵件發(fā)送成功頁面
return "CheckSuccess";
}
}
ps:此處只給出了調用發(fā)送html格式郵件的方法,普通文本格式郵件的調用更簡單,可以對照著寫
- 6 controller層調用發(fā)送郵件的service
@Controller
@RequestMapping("/mail")
public class MailController {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private MailService mailService;
@RequestMapping("/checkProject")
public String checkProject(){
return mailService.checkProject();
}
}
-
7 啟動項目,訪問localhost:9888/mail/checkProject
運行成功.png
總結:
springboot和javaMail的集成很簡單,主要就是獲得發(fā)送者郵箱的smtp服務器地址和授權密碼,做配置之后,調用自己手動封裝好的發(fā)送郵件方法即可。
