實現郵件發送
實現發送郵件的功能,可以在判定用戶異地登錄后發送郵件提醒或者使用郵件發送驗證碼的多種使用場景。
引入郵件依賴
<!--郵件發送依賴包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--freemarker制作Html郵件模板依賴包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
主要是引入了spring-boot-starter-mail和spring-boot-starter-freemarker的相關jar包。
其中,spring-boot-starter-mail是為了提供發生郵件的功能。
spring-boot-starter-freemarker是為了提供處理模板文件的功能。
配置郵箱參數
需要在application.yml文件中配置郵箱發送的相關參數(以QQ為例)
QQ郵箱授權碼獲取:https://service.mail.qq.com/detail/0/75
spring:
mail:
protocol: smtp
host: smtp.qq.com
port: 465
username: xxxx@qq.com #你的郵箱
password: xxxxxxxx #你的授權碼
properties:
mail:
smtp:
auth: true
ssl:
enable: true
socketFactory:
class: com.mysql.cj.jdbc.Socks5SocketFactory
fallback: true
增加發郵件類
創建IEmailService接口,為了對發郵件的功能指定一個規范,后面系統如果對接了其他的發郵件功能,也可以使用這套規范。
package com.kailong.service.email;
import javax.mail.MessagingException;
import java.util.List;
public interface IEmailService {
/**
* 發送簡單文本郵件
*
* @param receiveEmail 收件人郵箱
* @param subject 主題
* @param content 內容
*/
void sendEmail(String receiveEmail, String subject, String content);
/**
* 發送HTML格式的郵件
*
* @param receiveEmail 收件人郵箱
* @param subject 主題
* @param htmlContent 內容
* @throws MessagingException
*/
void sendHtmlEmail(String receiveEmail, String subject, String htmlContent) throws MessagingException;
/**
* 發送包含附件的郵件
*
* @param receiveEmail 收件人郵箱
* @param subject 主題
* @param emailContent 內容
* @param filePathList 附件地址
* @throws MessagingException 異常
*/
void sendAttachmentsEmail(String receiveEmail, String subject, String emailContent, List<String> filePathList) throws MessagingException;
}
這個接口中定義了三個方法:
- 發生簡單郵件。
- 發生html格式郵件。
- 發生帶附件的郵件。
實現接口:
@Service
public class EmailServiceImpl implements IEmailService {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String fromEmail;
/**
* 發送簡單文本郵件
*
* @param receiveEmail 收件人郵箱
* @param subject 主題
* @param content 內容
*/
@Override
public void sendEmail(String receiveEmail, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(fromEmail);
message.setTo(receiveEmail);
message.setSubject(subject);
message.setText(content);
javaMailSender.send(message);
}
/**
* 發送HTML格式的郵件
*
* @param receiveEmail 收件人郵箱
* @param subject 主題
* @param htmlContent 內容
* @throws MessagingException
*/
@Override
public void sendHtmlEmail(String receiveEmail, String subject, String htmlContent) throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(fromEmail);
helper.setTo(receiveEmail);
helper.setSubject(subject);
helper.setText(htmlContent, true);
javaMailSender.send(message);
}
/**
* 發送包含附件的郵件
*
* @param receiveEmail 收件人郵箱
* @param subject 主題
* @param emailContent 內容
* @param filePathList 附件地址
* @throws MessagingException 異常
*/
@Override
public void sendAttachmentsEmail(String receiveEmail, String subject, String emailContent, List<String> filePathList) throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(fromEmail);
helper.setTo(receiveEmail);
helper.setSubject(subject);
helper.setText(emailContent, true);
//添加附件資源
for (String item : filePathList) {
FileSystemResource file = new FileSystemResource(new File(item));
String fileName = item.substring(item.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
}
//發送郵件
javaMailSender.send(message);
}
}
創建測試接口:
@RestController
@RequestMapping("/job")
public class TestController {
private static final String SUCCESS = "success";
@Autowired
private EmailServiceImpl emailService;
@GetMapping("/test")
public String test() {
return SUCCESS;
}
@GetMapping("/sendEmail")
public String sendEmail() {
emailService.sendEmail("12lisu@163.com", "test", "test123");
return SUCCESS;
}
}
效果測試:




浙公網安備 33010602011771號