在项目中,很多地方要用到邮件通知功能,通过邮件注册,通过邮件找回密码,系统有问题邮件通知,到期通知,等等。
在springboot中,要实现邮件通知功能其实很简单,根本不需要额外去引包,引依赖。springboot本身就能快速地实现一个发送邮件的功能。
几行代码就搞定,下面我们看看具体实现。
1、application.yml配置
spring:
#邮箱基本配置
mail:
#配置smtp服务主机地址
# 我这里用的是阿里的企业邮箱
# qq邮箱为:smtp.qq.com
# sina邮箱为:smtp.sina.cn
# 163邮箱为:smtp.163.com
host: smtp.mxhichina.com
#发送者邮箱
username: postmaster@gzyuhe.com
#配置密码,密码或授权码
password: bnqolmfkahdgwyaiyz
#端口号465或587
port: 465
#默认的邮件编码为UTF-8
default-encoding: UTF-8
#其他参数
properties:
mail:
#配置SSL 加密工厂
smtp:
ssl:
enable: true
required: false
#开启debug模式,方便看日志排查错误
debug: true
2、编写发送邮件方法
/**
* 注入邮件发送类
*/
@Autowired
private JavaMailSenderImpl javaMailSender;
/**
* 邮件发送人取配置文件里的username
*/
@Value("${spring.mail.username}")
private String sendMailer;
/**
* 发送邮件
* @param to 收件人,多个;隔开
* @param subject 邮件主题
* @param text 邮件内容
*/
public void sendMail(String to, String subject, String text) {
//检测邮件信息
checkMail(to, subject, text);
try {
//true 代表支持复杂的类型
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(
javaMailSender.createMimeMessage(), true);
//邮件发信人
mimeMessageHelper.setFrom(sendMailer);
//邮件收信人 1或多个
mimeMessageHelper.setTo(to.split(";"));
//邮件主题
mimeMessageHelper.setSubject(subject);
//邮件内容
mimeMessageHelper.setText(text);
//邮件发送时间
mimeMessageHelper.setSentDate(new Date());
//发送邮件
javaMailSender.send(mimeMessageHelper.getMimeMessage());
}
catch (MessagingException e) {
log.error("", e);
throw new RuntimeException(e);
}
}
3、完整工具类
import java.util.Date;
import javax.mail.MessagingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
public class MailUtil {
/**
* 注入邮件发送类
*/
@Autowired
private JavaMailSenderImpl javaMailSender;
/**
* 邮件发送人取配置文件里的username
*/
@Value("${spring.mail.username}")
private String sendMailer;
/**
* 发送邮件
* @param to 收件人,多个;隔开
* @param subject 邮件主题
* @param text 邮件内容
*/
public void sendMail(String to, String subject, String text) {
//检测邮件信息
checkMail(to, subject, text);
try {
//true 代表支持复杂的类型
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(
javaMailSender.createMimeMessage(), true);
//邮件发信人
mimeMessageHelper.setFrom(sendMailer);
//邮件收信人 1或多个
mimeMessageHelper.setTo(to.split(";"));
//邮件主题
mimeMessageHelper.setSubject(subject);
//邮件内容
mimeMessageHelper.setText(text);
//邮件发送时间
mimeMessageHelper.setSentDate(new Date());
//发送邮件
javaMailSender.send(mimeMessageHelper.getMimeMessage());
}
catch (MessagingException e) {
log.error("", e);
throw new RuntimeException(e);
}
}
/**
* 检测邮件信息
* @param to 收件人,多个;隔开
* @param subject 邮件主题
* @param text 邮件内容
*/
private void checkMail(String to, String subject, String text) {
if (StringUtils.isEmpty(to)) {
throw new RuntimeException("邮件收信人不能为空");
}
if (StringUtils.isEmpty(subject)) {
throw new RuntimeException("邮件主题不能为空");
}
if (StringUtils.isEmpty(text)) {
throw new RuntimeException("邮件内容不能为空");
}
}
}
4、调用
/**
* 先注入邮件工具类
*/
@Autowired
private MailUtil mailUtil;
//调用方法发送邮件
mailUtil.sendMail("123456789@qq.com", "测试邮件主题","测试邮件内容");
完事,搞定收工。