在Spring Boot中发送邮件是一个相对直接的过程,主要得益于Spring Framework内置的对JavaMailSender接口的支持。
一、准备工作(QQ邮箱为例)
首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全称为Simple MailTransfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。
1.打开设置
2.找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
3.点击开启服务
4.发送短信验证
5.保存授权码
授权码保存后准备工作就结束了
二、添加依赖与配置
使用SpringBoot发送邮件,首先要添加邮件依赖
<!--添加邮件依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
随后配置application.yml文件
spring:
mail:
host: smtp.qq.com #邮件服务器地址
port: 465 #端口号
username:
password:
default-encoding: UTF-8 #默认编码格式
properties:
mail:
debug: true #启动debug调试
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory #SSL连接配置
查看服务器地址和端口
打开帮助中心
搜索SSL
查看服务器地址和端口
三、发送邮件
1.创建Controller
1.JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration类中配置好的,该类在Mail自动配置类MailSenderAutoConfiguration中导入,因此这里使用@Autowired注入JavaMailSender就可以使用了
2.传递的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容
3.简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发送出去
@RestController
public class EmailController {
@Autowired
private JavaMailSender javaMailSender;
/**
* 发送不带附件的邮件
* @param from
* @param to
* @param cc
* @param subject
* @param text
*/
public void sendMail(String from, String to, String cc, String subject, String text){
SimpleMailMessage smm = new SimpleMailMessage();
smm.setFrom(from); // 发送者
smm.setTo(to); // 收件人
smm.setCc(cc); // 抄送人
smm.setSubject(subject); // 邮件主题
smm.setText(text); // 邮件内容
javaMailSender.send(smm); // 发送邮件
}
}
2.测试类
使用测试类给自己发邮件
@SpringBootTest
class EmailControllerTest {
@Autowired
private EmailController emailController;
@Test
void sendMail() {
emailController.sendMail(
"2462137172@qq.com",
"2462137172@qq.com",
"2462137172@qq.com",
"SpringBoot发送邮件",
"邮件发送成功啦!"
);
}
}
测试结果:
四、发送带有附件的邮件
1.Controller
要发送一个带附件的邮件也非常容易,通过调用Attachment方法即可添加附件,在Controller中添加如下方法
这里使用MimeMessageHelper简化了邮件配置,它的构造方法的第二个参数true表示构造一个multipart message类型的邮件。最后通过addAttachment方法添加附件。
/**
* 发送带附件的邮件
* @param from
* @param to
* @param subject
* @param text
* @param filePath
*/
public void sendFileMail(String from, String to, String subject, String text, String filePath) {
try {
// 检查文件路径是否有效
File file = new File(filePath);
if (!file.exists()) {
throw new FileNotFoundException("文件不存在: " + filePath);
}
MimeMessage mm = javaMailSender.createMimeMessage();
MimeMessageHelper mmh = new MimeMessageHelper(mm, true);
mmh.setFrom(from);
mmh.setTo(to);
mmh.setSubject(subject);
mmh.setText(text);
mmh.addAttachment(file.getName(), file);
javaMailSender.send(mm);
System.out.println("邮件发送成功");
} catch (Exception e) {
e.printStackTrace();
}
}
2. 测试类
@Test
void sendFileMail() {
emailController.sendFileMail(
"2462137172@qq.com",
"2462137172@qq.com",
"发送带有文件的邮件",
"文件",
"C:\\Users\\li\\Desktop\\lanyangyang.jpg"
);
}
测试结果