在用户注册及忘记密码功能中需要使用发送验证码到邮箱,spring-boot中只需要在properties文件添加相关配置就能实现发送邮件的功能。
在yml文件中添加如下配置
spring:
email:
#SMTP server host,这里我使用的是阿里云SMTP服务器
host: smtp.qiye.aliyun.com
# Login user of the SMTP server
username: test@aaa.com
# Login password of the SMTP server
password: 123456
# Protocol used by the SMTP server
protocol: smtp
default-encoding: utf-8
properties:
mail:
smtp:
starttls:
enable: false
auth: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
port: 465
2.使用JavaMailSender发送邮件
public abstract class AbstractEmailHandler {
Logger logger= LogManager.getLogger(EmailHandler.class);
@Autowired
private JavaMailSender mailSender;
@Autowired
private TemplateEngine templateEngine;
/**
* 发送 html 格式邮件
* @param from 发件人邮箱
* @param to 收件人邮箱
* @param subject 主题
* @param content 内容
*/
public void sendHtmlEmail(String from,String to,String subject,String content) {
if (logger.isInfoEnabled()) {
logger.info("start send html email ");
}
MimeMessage mimeMessage=mailSender.createMimeMessage();
try {
MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage,true);
messageHelper.setFrom(from);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content,true);
ClassPathResource logoImage=new ClassPathResource("templates/images/logo.png");
messageHelper.addInline("logoImage",logoImage);
mailSender.send(mimeMessage);
if (logger.isInfoEnabled()) {
logger.info("html email send success");
}
} catch (Exception e) {
logger.error("发送验证码邮件出错",e);
throw new BusinessException(ResponseStatusCode.REQUEST_BUSINESS_ERROR.getCode(),"验证码邮件发送失败");
}
}
/**
* 发送HTML邮件
* @param fromEmail 发送者邮箱地址
* @param toEmail 收件人邮箱地址
* @param subject 主题
* @param templateName 模板名称
* @param contextParams 模板上下文变量
*/
public void sendHtmlEmail(String fromEmail, String toEmail, String subject, String templateName, Map<String,Object> contextParams) {
// 创建html模板上下文对象
Context context = new Context(Locale.CHINESE);
if (contextParams!= null && !contextParams.isEmpty()) {
context.setVariables(contextParams);
}
// 处理模板内容
String emailContent = templateEngine.process(templateName, context);
// 发送html邮件
sendHtmlEmail(fromEmail, toEmail, subject, emailContent);
}
/**
* 发送文字邮件
* @param fromEmail
* @param toEmail
* @param subject
* @param content
*/
public void sendCharacterEmail(String fromEmail,String toEmail,String subject,String content) {
if (logger.isInfoEnabled()) {
logger.info("start send character email ");
}
MimeMessage mimeMessage=mailSender.createMimeMessage();
MimeMessageHelper messageHelper= null;
try {
messageHelper = new MimeMessageHelper(mimeMessage,true);
messageHelper.setFrom(fromEmail);
messageHelper.setTo(toEmail);
messageHelper.setSubject(subject);
messageHelper.setText(content,false);
mailSender.send(mimeMessage);
if (logger.isInfoEnabled()) {
logger.info("charater email send success");
}
} catch (MessagingException e) {
logger.error("发送邮件出错",e);
throw new BusinessException(ResponseStatusCode.REQUEST_BUSINESS_ERROR.getCode(),"邮件发送失败");
}
}
}