相信使用過Spring的衆多開發者都知道Spring提供了非常好用的JavaMailSender接口實作郵件發送,在Spring Boot的Starter子產品中也為此提供了自動化配置。下面通過執行個體來講解如何在Spring Boot中使用JavaMailSender發送郵件。
一、引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二、application.properties配置
##端口号
server.port=8888
##根據自己的情況填寫
##郵箱伺服器位址
##QQ smtp.qq.com
##sina smtp.sina.cn
##aliyun smtp.aliyun.com
##163 smtp.163.com
spring.mail.host=smtp.qq.com
##郵箱使用者名
[email protected]
##郵箱密碼(注意:QQ郵箱應該使用授權碼)
spring.mail.password=****************
##編碼格式
spring.mail.default-encoding=UTF-8
##發送郵件位址
mail.fromMail.sender=949[email protected]
##接收郵件位址
[email protected]
三、郵件發送控制器
package com.xieke.test.demo;
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.beans.factory.annotation.Value;
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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 郵件發送控制器
*
* @author 邪客
*
*/
@RestController
public class MailController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Value("${mail.fromMail.sender}")
private String sender;// 發送者
@Value("${mail.fromMail.receiver}")
private String receiver;// 接受者
@Autowired
private JavaMailSender javaMailSender;
/**
* @Description http://localhost:8888/sendMail
* @method 發送文本郵件
* @return
*/
@RequestMapping("/sendMail")
public String sendMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(sender);
message.setTo(receiver);
message.setSubject("邪客發送文本郵件測試");// 标題
message.setText("世界,你好!--->文本郵件");// 内容
try {
javaMailSender.send(message);
logger.info("文本郵件發送成功!");
return "success";
} catch (Exception e) {
logger.error("文本郵件發送異常!", e);
return "failure";
}
}
/**
* @Description http://localhost:8888/sendHtmlMail
* @method 發送html郵件
* @return
*/
@RequestMapping("/sendHtmlMail")
public String testHtmlMail() {
String content = "<html><body><h3>hello world ! --->Html郵件</h3></body></html>";
MimeMessage message = javaMailSender.createMimeMessage();
try {
//true表示需要建立一個multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(sender);
helper.setTo(receiver);
helper.setSubject("邪客發送Html郵件測試");
helper.setText(content, true);
javaMailSender.send(message);
logger.info("Html郵件發送成功!");
return "success";
} catch (MessagingException e) {
logger.error("Html郵件發送異常!", e);
return "failure";
}
}
/**
* @Description http://localhost:8888/sendFilesMail
* @method 發送附件郵件
* @return
*/
@RequestMapping("/sendFilesMail")
public String sendFilesMail() {
String filePath = "F:\\select_from_user.sql";
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(sender);
helper.setTo(receiver);
helper.setSubject("邪客發送附件郵件測試");
helper.setText("一封帶附件的郵件", true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
javaMailSender.send(message);
logger.info("附件郵件發送成功!");
return "success";
} catch (MessagingException e) {
logger.error("附件郵件發送異常!", e);
return "failure";
}
}
/**
* @Description http://localhost:8888/sendInlineResourceMail
* @method 發送圖檔郵件
* @return
*/
@RequestMapping("/sendInlineResourceMail")
public String sendInlineResourceMail() {
String id = "xieke90";
// cid:内嵌資源
String content = "<html><body>帶有圖檔的郵件:<img src=\'cid:" + id + "\'></body></html>";
String imgPath = "F:\\spring-cloud.png";
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(sender);
helper.setTo(receiver);
helper.setSubject("邪客發送圖檔郵件測試");
helper.setText(content, true);
FileSystemResource res = new FileSystemResource(new File(imgPath));
helper.addInline(id, res);
javaMailSender.send(message);
logger.info("圖檔郵件發送成功!");
return "success";
} catch (MessagingException e) {
logger.error("圖檔郵件發送異常!", e);
return "failure";
}
}
}
四、分别測試文本、Html、附件、圖檔郵件發送
<1>、通路http://localhost:8888/sendMail,測試結果如下:
<2>、通路http://localhost:8888/sendHtmlMail,測試結果如下:
<3>、通路http://localhost:8888/sendFilesMail,測試結果如下:
<4>、通路http://localhost:8888/sendInlineResourceMail,測試結果如下:
代碼已上傳至碼雲:https://gitee.com/xieke90/spring_boot_demo (springboot-mail-demo)