实现邮件发送
实现发送邮件的功能,可以在判定用户异地登录后发送邮件提醒或者使用邮件发送验证码的多种使用场景。
引入邮件依赖
<!--邮件发送依赖包-->
<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;
}
}
效果测试:
