概要
在Spring Boot中发送电子邮件
相对简单。你可以使用Spring的邮件支持来实现这一点。
步骤:
1.添加依赖
:首先,需要在你的pom.xml文件中添加Spring Boot的邮件发送器依赖。
2. 配置邮件服务器
:在application.properties或application.yml中配置邮件服务器的相关信息。
3. 编写发送邮件的代码
:创建一个服务类来封装邮件发送的逻辑。
JavaMailSender接口
在Spring框架中,JavaMailSender 是一个接口
,用于发送电子邮件 。
Spring Boot的spring-boot-starter-mail
模块提供了自动化配置
,简化了在Spring Boot应用程序中发送电子邮件的设置过程。
当你添加了spring-boot-starter-mail依赖后,Spring Boot会自动配置JavaMailSender实例,并根据application.yml文件中的属性来配置这个实例。你可以直接在需要发送邮件的地方通过@Autowired注解将JavaMailSender实例注入到你的类中,然后使用它来发送邮件。
SpringBoot中实现发送邮件
第一步添加依赖
注意:我是基于springboot 2.7.17
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.7.1</version></dependency>
获取依赖其他版本的官网:Spring Boot Starter Mail
配置邮件服务器
QQ邮箱授权码如何获取
springboot中配置
spring:mail:host: smtp.qq.com # qq的邮件服务器主机地址 【163网易邮箱的是smtp.163.com】username: 58963727@qq.com # 登录邮件服务器的邮箱【自己的邮箱】password: axqyweertcentfcy # 授权码port: 587 # 邮件服务器端口号 【163网易邮箱的是465】smtp:auth: true # 是否需要身份验证starttls.enabled: true # 是否启用 STARTTLS 支持default-encoding: utf-8 # 默认邮件编码为 UTF-8
java代码实现
业务层:
@Service
public class EmailService { @Autowiredprivate JavaMailSender emailSender;// 从属性文件中读取发件人地址@Value("${spring.mail.username}")private String from;/*** 发送简单文本邮件* @param to 收件人地址* @param subject 邮件主题* @param text 邮件内容*/public void sendSimpleMessage(String to, String subject, String text) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from); // 设置发件人邮箱地址message.setTo(to); // 设置收件人地址message.setSubject(subject); // 设置邮件主题message.setText(text); // 设置邮件内容emailSender.send(message); // 发送邮件}
}
Controller层:
@RestController
@RequestMapping
public class EmailController {@Autowiredprivate EmailService emailService;@PostMapping("/sendEmail")public String sendEmail(@RequestBody EmailDTO emailDTO) {emailService.sendSimpleMessage(emailDTO.getTo(), emailDTO.getSubject(), emailDTO.getText());return "Email sent successfully!";}
}
接受前端传过来的json格式的数据
@Data
public class EmailDTO {private String to; //表示收件人的电子邮件地址private String subject; //表示邮件的主题private String text; //表示邮件的正文内容
}
效果
这里用POST测试,发送POST
请求
用的网易163邮箱成功接收
可能遇到错误
用qq邮箱发邮件
错误:com.sun.mail.smtp.SMTPSendFailedException: 502 Invalid input from 39.152.15.45 to newxmesmtplogicsvrszc19-0.qq.com.
最后解决的方法是在java代码中直接加入发送方的邮箱:
用网易邮箱发邮件
错误:Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF]
解决方法,配置文件中补充
spring:mail:protocol: smtps
觉得有用的可以留个关注❤