Spring Boot 对于发送邮件这种常用功能也提供了开箱即用的 Starter:spring-boot-starter-mail
。
通过这个 starter,只需要简单的几行配置就可以在 Spring Boot 中实现邮件发送,可用于发送验证码、账户激活等等业务场景。
我只用了qq邮箱作为案例,其他邮箱也差不多步骤
1.开启邮箱授权
2.项目添加依赖
在 项目pom.xml 引入相关依赖
spring-boot-starter-mail
:这个启动器内部封装了发送邮件的代码,必须引入的。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3.在 application.yaml
中配置属性。
mail:
# 指定邮件服务器地址
host: smtp.qq.com
# 登录账户
username: xxx@qq.com
# 登录密码 就是刚刚获取依赖码
password: xxxxxx
# 端口
port: 465
# 默认编码
default-encoding: UTF-8
# 使用的协议
protocol: smtps
# 其他的属性
properties:
"mail.smtp.connectiontimeout": 5000
"mail.smtp.timeout": 3000
"mail.smtp.writetimeout": 5000
"mail.smtp.auth": true
"mail.smtp.starttls.enable": true
"mail.smtp.starttls.required": true
4.发邮件前置工作
配置javaBean service servicImpl control 工作
注意:这些不是需要一模一样的,完全可以自己调整
JavaBean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Email {
private String email; // 要接受的邮箱
private String span; // 标题
private String content; // 文本 或者 html 代码
}
service
public interface EmailService {
/**
* 发送文本邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
void sendSimpleMail(String to, String subject, String content) throws MessagingException, UnsupportedEncodingException;
}
serviceImpl
@Service
@Transactional
public class EmailServiceImpl implements EmailService {
@Autowired
private JavaMailSender javaMailSender;
@Override
public void sendSimpleMail(String to, String subject, String content) throws MessagingException, UnsupportedEncodingException {
// 创建一个邮件消息
MimeMessage message = javaMailSender.createMimeMessage();
// 创建
MimeMessageHelper helper = new MimeMessageHelper(message,false);
// 发件人邮箱和名称
helper.setFrom("xxx@qq.com","邮件名");
// 收件人邮箱
helper.setTo(to);
// 邮件标题
helper.setSubject(subject);
// 邮件正文,第二个参数表示是否是HTML正文
helper.setText(content,false); // 第一个参数是传过去的值 第二个是否是html格式
// 发送
javaMailSender.send(message);
}
}
control
@Resource
private EmailService emailService;
@PostMapping("/span")
public BaseResult<String> sendSimpleEmail(Email email) throws MessagingException, UnsupportedEncodingException {
emailService.sendSimpleMail(email.getEmail(), email.getSpan(),email.getContent() );
return BaseResult.ok("已发送");
}
首先,通过 javaMailSender
的 createMimeMessage
创建一个 MimeMessage
对象,表示邮件。
接着创建 MimeMessageHelper
对象,第二个 boolean
参数表示,是否是一个 Multipart 邮件(带有附件)。
然后,通过 helper
对象,设置邮件的发件人邮箱和名称、收件人、主题、内容等信息。注意,setText
方法第二个参数表示内容是否是 html 正文。本例中,正文使用了一个 strong
HTML 标签。
执行测试,发送邮件。然后进入收件箱查看:
测试
更多复杂的功能可以查看SpringBoot官网