spring boot 傳送email
Spring Boot使用JavaMailSender傳送郵件
Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot中也提供了相應的自動化配置。
這篇文章主要講如何在Spring Boot中使用JavaMailSender傳送郵件。
傳送郵件
1,在pom.xml中引入spring-boot-starter-mail依賴:
複製程式碼
複製程式碼<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId>
2,在application.properties中配置相應的屬性:(我這裡模擬的是163郵箱給QQ郵箱傳送郵件)
複製程式碼
spring.mail.host=smtp.163.com
spring.mail.username=郵箱使用者名稱 so****@163.com
spring.mail.password=郵箱密碼
spring.mail.default-encoding=UTF-8
複製程式碼
3,寫傳送郵件的測試類
複製程式碼
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/mail")
public class MailController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender mailSender;
@RequestMapping("/send")
public void sendMail(){
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("so****@163.com");
message.setTo("239****@qq.com");
message.setSubject("it is a test for spring boot");
message.setText("你好,我是小黃,我正在測試傳送郵件。");
try {
mailSender.send(message);
logger.info("小黃的測試郵件已傳送。");
} catch (Exception e) {
logger.error("小黃髮送郵件時發生異常了!", e);
}
}
}
複製程式碼
4,執行啟動類
複製程式碼
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableAutoConfiguration
@MapperScan(“cn.yideng.*.dao”)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
複製程式碼
5,瀏覽器執行 http://localhost:8080/mail/send
6,登入163郵箱,在傳送箱裡檢視
7,登入QQ郵箱,在收件箱裡檢視,如下圖
可以看出Spring Boot的starter模組提供了自動化配置,在引入了spring-boot-starter-mail依賴之後,會根據配置檔案中的內容去建立JavaMailSender例項,因此我們可以直接在需要使用的地方直接@Autowired來引入 JavaMailSender 郵件傳送物件。
當然在實際使用過程中,不會這麼簡單,我們可能會要求帶上附件、或使用郵件模組等。這時我們就需要使用MimeMessage來設定更復雜的右鍵內容,下面就來看看怎麼實現它。
傳送帶附件的郵件
測試類 : 還是模擬 163郵箱 給QQ郵箱傳送郵件
複製程式碼
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
-
傳送有附件的郵件
*/
@RestController
@RequestMapping("/mail")
public class AttachmentsMailController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender mailSender;
@RequestMapping("/att")
public void sendMail() throws MessagingException{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(“so****@163.com”);
helper.setTo(“239****@qq.com”);
helper.setSubject(“主題:傳送有附件的郵件”);
helper.setText(“你好,我是小黃,我正在測試傳送一封有附件的郵件。”);
FileSystemResource file1 = new FileSystemResource(new File(“d:\cat.jpg”));
FileSystemResource file2 = new FileSystemResource(new File(“d:\java-1.jpg”));
helper.addAttachment(“附件-1.jpg”, file1);
helper.addAttachment(“附件-2.jpg”, file2);
try {
mailSender.send(mimeMessage);
logger.info("小黃的測試帶附件的郵件已傳送。");
} catch (Exception e) {
logger.error("小黃髮送帶附件郵件時發生異常了!", e);
}
}
}
複製程式碼
2,需要 在D盤下準備兩張圖片cat.jpg java-1.jpg,
3,瀏覽器執行 http://localhost:8080/mail/att
4,登入163郵箱,在傳送箱裡檢視,如下圖
5,登入QQ郵箱,在收件箱裡檢視,如下圖
嵌入靜態資源的郵件
還有一種是通過嵌入圖片等靜態資源,可以直接看到圖片,而不用從附近中檢視具體的圖片,來看看吧。
測試類:
複製程式碼
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
- 嵌入靜態資源
*/
@RestController
@RequestMapping("/mail")
public class StaticResourceMailController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender mailSender;
@RequestMapping("/static")
public void sendMail() throws MessagingException{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(“so****@163.com”);
helper.setTo(“239****@qq.com”);
helper.setSubject(“主題:嵌入靜態資源”);
helper.setText("<img src=“cid:hello” >", true);
// 注意addInline()中資源名稱 hello 必須與 text正文中cid:hello對應起來
FileSystemResource file1 = new FileSystemResource(new File(“d:\cat.jpg”));
helper.addInline(“hello”, file1);
try {
mailSender.send(mimeMessage);
logger.info("小黃的測試嵌入靜態資源的郵件已傳送。");
} catch (Exception e) {
logger.error("小黃髮送嵌入靜態資源的郵件時發生異常了!", e);
}
}
}
複製程式碼
要特別注意addInline()中資源名稱 hello 必須與 text正文中cid:hello對應。
2,需要 在D盤下準備兩張圖片cat.jpg
3,瀏覽器執行 http://localhost:8080/mail/static
4,登入163郵箱,在傳送箱裡檢視,如下圖
5,登入QQ郵箱,在收件箱裡檢視,如下圖
好了,Spring Boot使用JavaMailSender傳送郵件就到這裡了。