一 點睛
使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。
在Spring Boot的Starter模組中也為此提供了自動化配置。
下面通過例項看看如何在Spring Boot中使用JavaMailSender傳送郵件。
二 實戰
1 引入相關依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-velocity</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2 application.properties配置
spring.mail.host=smtp.qq.com
spring.mail.username=798103175@qq.com
spring.mail.password=授權登入密碼
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
3 準備一個郵件模板
<html>
<body>
<h3>你好, ${username}, 這是一封模板郵件!</h3>
</body>
</html>
4 啟動類
package com.didispace;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5 測試類
package com.didispace;
import org.apache.commons.collections.map.HashedMap;
import org.apache.velocity.app.VelocityEngine;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.ui.velocity.VelocityEngineUtils;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Map;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ApplicationTests {
@Autowired
private JavaMailSender mailSender;
@Autowired
private VelocityEngine velocityEngine;
@Test
public void sendSimpleMail() throws Exception {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("798103175@qq.com");
message.setTo("798103175@qq.com");
message.setSubject("主題:簡單郵件");
message.setText("測試郵件內容");
/*
由於Spring Boot的starter模組提供了自動化配置,
所以在引入了spring-boot-starter-mail依賴之後,
會根據配置檔案中的內容去建立JavaMailSender例項,
因此我們可以直接在需要使用的地方直接@Autowired來引入郵件傳送物件。
* */
mailSender.send(message);
}
@Test
public void sendAttachmentsMail() throws Exception {
/*
有些郵件會帶上附件
這個時候我們就需要使用MimeMessage來設定複雜一些的郵件內容
* */
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("798103175@qq.com");
helper.setTo("798103175@qq.com");
helper.setSubject("主題:有附件");
helper.setText("有附件的郵件");
FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
helper.addAttachment("附件-1.jpg", file);
helper.addAttachment("附件-2.jpg", file);
mailSender.send(mimeMessage);
}
@Test
public void sendInlineMail() throws Exception {
/*
有些郵件會帶上靜態資源
這個時候我們就需要使用MimeMessage來設定複雜一些的郵件內容
* */
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("798103175@qq.com");
helper.setTo("798103175@qq.com");
helper.setSubject("主題:嵌入靜態資源");
helper.setText("<html><body><img src=\"cid:photo\" ></body></html>", true);
FileSystemResource file = new FileSystemResource(new File("photo.jpg"));
//這裡需要注意的是addInline函式中資源名稱photo需要與正文中cid:photo對應起來
helper.addInline("photo", file);
mailSender.send(mimeMessage);
}
@Test
public void sendTemplateMail() throws Exception {
/*
通常我們使用郵件傳送服務的時候,都會有一些固定的場景,比如重置密碼、註冊確認等,
給每個使用者傳送的內容可能只有小部分是變化的。所以,很多時候我們會使用模板引擎來
為各類郵件設定成模板,這樣我們只需要在傳送時去替換變化部分的引數即可。
這個時候我們就需要使用MimeMessage來設定複雜一些的郵件內容
* */
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("798103175@qq.com");
helper.setTo("798103175@qq.com");
helper.setSubject("主題:模板郵件");
Map<String, Object> model = new HashedMap();
model.put("username", "cakin");
String text = VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, "template.vm", "UTF-8", model);
helper.setText(text, true);
mailSender.send(mimeMessage);
}
}
三 測試
1 簡單郵件測試
2 有附件郵件測試
3 嵌入靜態資源郵件
4 模組郵件
四參考
blog.csdn.net/qq_24452475/article/...
本作品採用《CC 協議》,轉載必須註明作者和本文連結