1、前言
企業中,需要我們對一些數據進行監控,或者將數據導出發給指定的人。簡單的通知採用的短信的形式,但是複雜的數據導出給其他人,就會採用郵件的方式。並且這樣成本比較低。Spring框架本身提供了Mail的支持,當然目前流行的springboot框架對郵件的支持更加友好。下面以springboot集成Mail爲例。
2、引入依賴
<!-- 郵件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<scope>provided</scope>
</dependency>
3、yml配置
spring:
# 郵件配置
mail:
host: smtp.163.com
port: 25
username: [email protected]
#郵箱的授權碼
password: 自己申請
protocol: smtp #可以不用設置,默認smtp
default-encoding: UTF-8 #可以不用設置,默認UTF-8
properties:
mail:
socketFactory:
class: javax.net.ssl.SSLSocketFactory #https協議認證需要配置
smtp:
#登錄服務器是否需要認證
auth: true
# 是對純文本通信協議的擴展。它提供一種方式將純文本連接升級爲加密連接(TLS或SSL),而不是另外使用一個端口作加密通信。
starttls:
enable: true
required: true
其中protocol和default-encoding可以不配置,因爲默認就是smtp和UTF-8,如圖:
4、demo
public class ToolController{
@Autowired
JavaMailSenderImpl mailSender;
public void test03() {
SimpleMailMessage message = new SimpleMailMessage();
// 該參數需要設置的與yml中配置的yml一致,否則會報錯
message.setFrom("[email protected]");
// 發送到的人,可以直接指定數組,發送多人
message.setTo("[email protected]");
// 郵件主題
message.setSubject("springboot集成Mail");
// 郵件內容
message.setText("測試內容!");
// 發送郵件
mailSender.send(message);
System.out.println("信息發送成功!");
}
}
5、工具類
很多時候我們都是把發送郵件作爲一個工具類,不需要注入任何Bean,可以做成以下配置:
@Test
public void test03() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.autostreets.com");
mailSender.setProtocol("smtp");
mailSender.setPort(25);
mailSender.setUsername("[email protected]");
mailSender.setPassword("****");
Properties properties = new Properties();
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.starttls.required", "true");
mailSender.setJavaMailProperties(properties);
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("[email protected]");
//String[] toArray = {"[email protected]","[email protected]", "[email protected]","[email protected]"};
//message.setTo(toArray);
message.setTo("[email protected]");
message.setSubject("Springboot集成Mail");
message.setText("郵件內容測試");
mailSender.send(message);
System.out.println("信息發送成功!");
}
方法中有很多常量,封裝是可以抽成常量。
6、附件或者模板發送
簡單信息的發送是使用 SimpleMailMessage 爲載體,附件則需要 MimeMessage 和 MimeMessageHelper這兩個類來作爲載體。
MimeMessageHelper 用於創建MIME消息的幫助類。它爲HTML佈局中的圖像,典型郵件附件和文本內容提供支持。
發送html模板:
MimeMessage message =mailSender.createMimeMessage();
// 注意構造參數爲一個值
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom("[email protected]");
helper.setTo("[email protected]");
helper.setSubject("發送HTML");
// 第二個參數爲支持html
helper.setText(html, true);
mailSender.send(message);
System.out.println("信息發送成功!");
源代碼:
發送附件:
MimeMessage message =mailSender.createMimeMessage();
// 第二個參數表示是否添加附件
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom("[email protected]");
helper.setTo("[email protected]");
helper.setSubject("發送附件");
helper.setText("測試附件");
File file = new File("E:\\Sample Pictures\\美圖1.jpg");
// 添加附件
helper.addAttachment("圖片", file);
mailSender.send(message);
System.out.println("信息發送成功!");
參數說明: