发送邮件功能模块在这里记录一下。 这里支持的是 找回密码 和 激活账户
第一步,加入pom。
<!--pom.xml依赖spring-boot-starter-mail模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--这里使用thymeleaf作为模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
第二步,写一份邮件模板
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
</table>
<table class="table" cellpadding="0" cellspacing="0">
<tbody>
<span th:text="${info}"></span></br>
<span th:text="${link}"></span>
</tbody>
</table>
<hr>
<p th:if="${language eq 1}" th:text="青岛XX集团有限公司"></p>
<p th:if="${language eq 2}" th:text="iTechene"></p>
<div th:if="${language eq 1}" th:text="'地址' + ${colon} + '青岛市崂山区松岭路999号'"></div>
<div th:if="${language eq 2}"
th:text="'Unit' + ${space} + 'A3-A4' + ${comma} + '8' + ${space} + 'Floor' + ${comma} + 'BlockA' + ${comma} + 'International' + ${space} + 'Innovation' + ${space} + 'Park' + ${comma} + 'No' + ${point} + '1Keyuanweiyi' + ${space} + 'Rd' + ${comma} + 'Laoshan' + ${space} + 'District' + ${comma} + 'Qingdao' + ${comma} + '00000000000' + ${comma} + 'PRChina'"></div>
<div th:if="${language eq 1}" th:text="'电话' + ${colon} + '0000000000000'"></div>
<div th:if="${language eq 2}" th:text="'telephone' + ${colon} + '00000000000'"></div>
<div th:if="${language eq 1}" th:text="'传真' + ${colon} + '0532-00000000000'"></div>
<div th:if="${language eq 2}" th:text="'hotline' + ${colon} + '0532-00000000000'"></div>
http://www.techen.cn</br>
核心价值观 Core Values</br>
1个中心:以客户为中心 One Focus,Customer Centric</br>
1个精神:奋斗 One Spirit,Work Hard</br>
1个灵魂:创新 One Soul, Innovate</br>
</body>
</html>
第三步,写IMailService
package com.techen.ami.service;
import java.util.Map;
/**
* @author lihao
* @date 2020年10月30日 17:29
* @Modify
**/
public interface IMailService {
//该url是前端所开放的账户激活验证界面
// String ACTIVATION_EMAIL_URL = "http://10.10.84.198:8002/amiues/email/cornActivation";
String ACTIVATION_EMAIL_URL = "http://localhost:8080/";
String ACTIVATION_INFO_ZH = "您好, 这是一封激活账户邮件。 请点击下方链接来激活您的账户。";
String ACTIVATION_INFO_EN = "Hello, this is an account activation email. Please click on the link below to activate your account.";
String RESET_PWD_INFO_ZH = "您好, 这是一封密码更改验证邮件。请在页面输入下方验证码完成重置密码操作。";
String RESET_PWD_INFO_EN = "Hello, this is a password change verification email. Please enter the verification code below on the page to complete the reset password operation.";
String ACTIVATION_SUBJECT_ZH = "激活账户邮件";
String ACTIVATION_SUBJECT_EN = "Activate account email";
String RESET_PWD_SUBJECT_ZH = "密码重置";
String RESET_PWD_SUBJECT_EN = "reset Password";
boolean sendAtivationEmail(Map<String, Object> paraMap);
boolean sendVerificationCodeEmail(Map<String, Object> paraMap);
String getAtivationInfo(int language);
String getAtivationSubject(int language);
String getResetPwdSubject(int language);
String getResetPwdInfo(int language);
void setUrl(String token);
String getUrl();
}
第四步,写ServiceImpl实现Service接口。
package com.techen.ami.service.impl;
import com.techen.ami.service.IMailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Map;
/**
* @author yanshubin
* @date 2020年10月30日 17:31
* @Modify
**/
@Slf4j
@Service
public class MailServiceImpl implements IMailService {
public MailServiceImpl() {
context = new Context();
context.setVariable("colon", ":");
context.setVariable("comma", ",");
context.setVariable("space", " ");
context.setVariable("point", ".");
}
/**
* Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口,这里直接注入即可使用
*/
@Autowired
private JavaMailSender mailSender;
@Resource
TemplateEngine templateEngine;
Context context;
// application.yml中的username,代表发送人邮箱
@Value("${spring.mail.username}")
private String from;
String url = "";
int language = 1; // 1--中文 2--英文 默认中文
//发送激活账户邮件
@Override
public boolean sendAtivationEmail(Map<String, Object> paraMap) {
if (!paraMap.containsKey("email")) {
return false;
}
String to = paraMap.get("email").toString();
if (!paraMap.containsKey("token")) {
return false;
}
setUrl(paraMap.get("token").toString());
//获取MimeMessage对象
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper;
try {
messageHelper = new MimeMessageHelper(message, true);
//邮件发送人
messageHelper.setFrom(from);
//邮件接收人
messageHelper.setTo(to);
//邮件主题
message.setSubject(getAtivationSubject(language));
context.setVariable("info", getAtivationInfo(language));
context.setVariable("language", language);
context.setVariable("link", getUrl());
String process = templateEngine.process("emailTemplate", context);
//邮件内容,html格式
messageHelper.setText(process, true);
//发送
mailSender.send(message);
} catch (MessagingException e) {
log.error("html email error===", e);
return false;
}
return true;
}
//发送重置密码邮件--(发送验证码)
@Override
public boolean sendVerificationCodeEmail(Map<String, Object> paraMap) {
if (!paraMap.containsKey("email")) {
return false;
}
String to = paraMap.get("email").toString();
//获取MimeMessage对象
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper;
try {
messageHelper = new MimeMessageHelper(message, true);
//邮件发送人
messageHelper.setFrom(from);
//邮件接收人
messageHelper.setTo(to);
//邮件主题
message.setSubject(getResetPwdSubject(language));
context.setVariable("info", getResetPwdInfo(language));
context.setVariable("language", language);
context.setVariable("link", paraMap.get("code"));
String process = templateEngine.process("emailTemplate", context);
//邮件内容,html格式
messageHelper.setText(process, true);
//发送
mailSender.send(message);
} catch (MessagingException e) {
log.error("html email error===", e);
return false;
}
return true;
}
@Override
public String getAtivationInfo(int language) {
if (1 == language) {
return ACTIVATION_INFO_ZH;
} else {
return ACTIVATION_INFO_EN;
}
}
@Override
public String getAtivationSubject(int language) {
if (1 == language) {
return ACTIVATION_SUBJECT_ZH;
} else {
return ACTIVATION_SUBJECT_EN;
}
}
@Override
public String getResetPwdSubject(int language) {
if (1 == language) {
return RESET_PWD_SUBJECT_ZH;
} else {
return RESET_PWD_SUBJECT_EN;
}
}
@Override
public String getResetPwdInfo(int language) {
if (1 == language) {
return RESET_PWD_INFO_ZH;
} else {
return RESET_PWD_INFO_EN;
}
}
@Override
public void setUrl(String token) {
url = ACTIVATION_EMAIL_URL + "?token=" + token;
}
@Override
public String getUrl() {
return url;
}
}
第五步,根据需要写Controller 层
第六步,application.yum中配置。
# 邮箱 邮件发送
mail:
# 邮箱配置
host: XXXX.163.com
# 我的邮箱
username: XXXXXXXXXX@163.com
# 注意这里不是邮箱密码,而是SMTP授权密码 开启POP3/SMTP
password: XXXXXXXXXXXX
port: 25
protocol: XXXX
default-encoding: utf-8
verify-email-expire: 120