使用spring boot实现发送邮件功能
使用spring boot实现发送邮件功能
一、引入依赖以及基本配置
首先,在pom.xml文件中引入spring boot提供的mail依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
接着,在application.yml中进行设置(在配置中注意缩进格式)
spring:
mail:
host: smtp.qq.com
username: 你的qq邮箱
password: qq邮箱的授权码
这里使用qq邮箱来进行测试,其中,username中填写自己的qq邮箱号,password填写qq邮箱的授权码。注意:授权码不是qq邮箱的密码,需要在打开自己的qq邮箱,找到“设置”里的“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 ”,接着开启“POP3/SMTP服务 ”,得到相应的授权码。
二、编写发送邮件的程序和对应的测试类
邮件发送类MailService
package com.silver.springboot.service;
import lombok.extern.slf4j.Slf4j;
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.Service;
/**
* 测试邮件发送功能
*/
@Slf4j
@Service
public class SendMail {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
/**
* 发送纯文本邮件
* @param to 邮件接收方
* @param subject 邮件主题
* @param text 邮件内容
*/
public void sendTextMail(String to,String subject,String text){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setTo(to);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(text);
try{
javaMailSender.send(simpleMailMessage);
logger.info("邮件已发送。");
}catch (Exception e){
logger.error("邮件发送失败。" + e.getMessage());
}
}
/**
* 发送带附件的邮件
* @param to 邮件接收方
* @param subject 邮件主题
* @param text 邮件内容
* @param path 附件所在的文件路径
*/
public void sendAttachmentMail(String to,String subject,String text,String path){
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try{
// 创建一个multipart格式的message
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
messageHelper.setFrom(from);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(text,true);
// 添加附件信息
FileSystemResource file = new FileSystemResource(new File(path));
String fileName = path.substring(path.lastIndexOf(File.separator));
messageHelper.addAttachment(fileName,file);
// 发送带附件的邮件
javaMailSender.send(mimeMessage);
logger.info("邮件发送成功");
}catch (Exception e){
logger.error("带有附件的邮件发送失败。" + e.getMessage());
}
}
}
测试类
package com.silver.springboot.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SendMailTest {
@Autowired
private SendMail mailService;
private String toEmail = "[email protected]"; // 填写你的qq邮箱号
@Test
public void sendTextMail() {
mailService.sendTextMail(toEmail,"主题","测试内容");
}
@Test
public void sendAttachmentMail() {
mailService.sendAttachmentMail(toEmail,"这是带附件的邮件","有附件","D:\\笔记整理\\使用spring boot实现发送邮件功能.md");
}
}
运行测试类,可以在自己的qq邮箱收到相应的邮件。
参考:
https://blog.****.net/yshuailong/article/details/83378868