暫時使用的是Spring提供的org.springframework.mail.javamail.JavaMailSender發(fā)送郵件。
1. 引入依賴
<!--引入郵件依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--引入Thymeleaf依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2. 設置郵件配置信息
spring:
#發(fā)送郵件設置
mail:
host: smtp.163.com
username: xxxxxx@163.com
#對l63郵箱,password是授權碼
password: xxxxxx
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
==注意:如果發(fā)送方用的是163郵箱,password對應的是郵箱的授權碼,而不是你的郵箱密碼。==
3. 發(fā)送郵件
3.1 發(fā)送普通文本郵件
EmailController .java
package com.xj.learn.controller;
import com.xj.learn.util.JmsUtil;
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;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* @Description: 發(fā)送郵件類
* @Author: RabbitsInTheGrass_xj
* @Date: 2019/10/2 09:39
*/
@RestController
@RequestMapping("/email")
public class EmailController {
@Autowired
private JmsUtil jmsUtil;
/**
* 發(fā)送簡單的郵件
* @return 結果
*/
@RequestMapping("sendSimpleEmail")
public String sendSimpleEmail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
// 接收地址
message.setTo("xxxxxx@qq.com");
// 標題
message.setSubject("一封普通文本郵件");
// 內容
message.setText("我要發(fā)送一份普通文本郵件。");
return jmsUtil.sendSimpleEmail(message);
}
}
JmsUtil .java
package com.xj.learn.util;
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.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
/**
* @Description: 發(fā)送郵件工具類
* @Author: RabbitsInTheGrass_xj
* @Date: 2019/10/2 09:45
*/
@Component
public class JmsUtil {
private static final Logger logger = LoggerFactory.getLogger(JmsUtil.class);
@Autowired
private JavaMailSender jms;
@Value("${spring.mail.username}")
private String from;
public String sendSimpleEmail(SimpleMailMessage message) {
try {
jms.send(message);
return "發(fā)送成功";
} catch (Exception e) {
logger.error(e.getMessage(), e);
return "發(fā)送失敗";
}
}
}
3.2 發(fā)送HTML格式內容的郵件
EmailController .java
/**
* 發(fā)送HTML格式內容的郵件
* @return 發(fā)送結果
*/
@RequestMapping("sendHtmlEmail")
public String sendHtmlEmail() {
// 接收地址
String toAddress = "xxxxxxx@qq.com";
// 標題
String subject = "一封HTML格式內容的郵件";
// 帶HTML格式的內容
StringBuilder sb = new StringBuilder("<p style='color:#42b983'>我要發(fā)送一份HTML格式內容的郵件。</p>");
return jmsUtil.sendHtmlEmail(toAddress,subject,sb.toString());
}
JmsUtil .java
package com.xj.learn.util;
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.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.internet.MimeMessage;
/**
* @Description: 發(fā)送郵件工具類
* @Author: RabbitsInTheGrass_xj
* @Date: 2019/10/2 09:45
*/
@Component
public class JmsUtil {
private static final Logger logger = LoggerFactory.getLogger(JmsUtil.class);
@Autowired
private JavaMailSender jms;
@Value("${spring.mail.username}")
private String from;
public String sendHtmlEmail(String toAddress, String subject, String text) {
try {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toAddress);
helper.setSubject(subject);
//true表示發(fā)送HTML格式郵件
helper.setText(text, true);
jms.send(message);
return "發(fā)送成功";
} catch (Exception e) {
logger.error(e.getMessage(), e);
return "發(fā)送失敗";
}
}
}
3.3 發(fā)送帶附件的郵件
EmailController .java
/**
*發(fā)送帶附件的郵件
* @return 發(fā)送結果
*/
@RequestMapping("sendAttachmentsMail")
public String sendAttachmentsMail() {
// 接收地址
String toAddress = "xxxxx@qq.com";
// 標題
String subject = "一封帶附件的郵件";
// 內容
String text = "詳情參見附件內容!";
// 傳入附件
FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/file/xxxx.doc"));
return jmsUtil.sendAttachmentsMail(toAddress,subject,text,file);
}
JmsUtil .java
public String sendAttachmentsMail(String toAddress, String subject, String text, FileSystemResource file) {
try {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toAddress);
helper.setSubject(subject);
helper.setText(text);
helper.addAttachment(file.getFilename(), file);
jms.send(message);
return "發(fā)送成功";
} catch (Exception e) {
logger.error(e.getMessage(), e);
return "發(fā)送失敗";
}
}
3.4 發(fā)送帶靜態(tài)資源的郵件
EmailController .java
/**
* 發(fā)送帶靜態(tài)資源的郵件
* @return 發(fā)送結果
*/
@RequestMapping("sendInlineMail")
public String sendInlineMail() {
// 接收地址
String toAddress = "xxxxxxx@qq.com";
// 標題
String subject = "一封帶靜態(tài)資源的郵件";
String contentId = "img";
// 內容
String text = "<html><body>一份美圖:<img src='cid:" + contentId + "'/></body></html>";
// 傳入附件
FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/yourName.jpg"));
return jmsUtil.sendInlineMail(toAddress,subject,text,file,contentId);
}
JmsUtil .java
public String sendInlineMail(String toAddress, String subject, String text, FileSystemResource file, String contentId) {
MimeMessage message;
try {
message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toAddress);
helper.setSubject(subject);
helper.setText(text,true);
//contentId 必須與圖片標簽里cid后的名稱相對應,例如:img
helper.addInline(contentId, file);
jms.send(message);
return "發(fā)送成功";
} catch (Exception e) {
logger.error(e.getMessage(), e);
return "發(fā)送失敗";
}
}
3.5 使用模板發(fā)送郵件
在發(fā)送驗證碼等情況下可以創(chuàng)建一個郵件的模板,唯一的變量為驗證碼。這個例子中使用的模板解析引擎為Thymeleaf,所以必須引入Thymeleaf依賴。
EmailController .java
/**
* 發(fā)送模板郵件
*
* @param code 驗證碼
* @return 發(fā)送結果
*/
@RequestMapping("sendTemplateEmail")
public String sendTemplateEmail(String code) {
//接收地址
String toAddress = "xxxxx@qq.com";
//標題
String subject = "發(fā)送一份模板郵件";
//郵件模板
String templateName = "emailTemplate";
Context context = new Context();
context.setVariable("code", code);
return jmsUtil.sendInlineMail(toAddress, subject, templateName, context);
}
JmsUtil .java
public String sendInlineMail(String toAddress, String subject, String templateName, Context context) {
try {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
// 接收地址
helper.setTo(toAddress);
// 標題
helper.setSubject(subject);
// 處理郵件模板
String template = templateEngine.process(templateName, context);
helper.setText(template, true);
jms.send(message);
return "發(fā)送成功";
} catch (Exception e) {
logger.error(e.getMessage(), e);
return "發(fā)送失敗";
}
}
emailTemplate.html
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>驗證碼郵件模板</title>
</head>
<body>
您好,您的驗證碼為<span th:text="${code}"></span>,請在兩分鐘內使用完成操作。
</body>
</html>
4. 啟動服務驗證
啟動服務后請求各個方法即可。