1、前言
<!--mail-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
重新加載一下Maven庫,加載後,會出現郵件相關的jar。可能有的小夥伴IDEA設置了自動加載pom文件,此時就不需要點刷新鍵啦。
# mail
spring.mail.host=smtp.qq.com //QQ郵箱主機地址 ;136郵箱主機地址:smtp.163.com
spring.mail.port=587 //端口號
[email protected] //發件人QQ郵箱,修改成個人的或者企業郵箱
spring.mail.password=woqybrryawjhieh // 授權碼,需要進入QQ郵箱設置中打開權限,獲取此授權碼
spring.mail.default-encoding=UTF-8 //默認的編碼的確是UTF-8
spring.mail.properties.mail.smtp.auth=true
/**
* @Desc 重置用戶密碼併發送郵件
* @Param
* @return
* @Date 2020/3/21 17:29
*/
@PostMapping("/sendMail")
@LoginRequired
public JsonData sendMail(@RequestParam(value = "toMail") String toMail,
@RequestParam(value = "userId") Long userId) {
if (StringUtils.isEmpty(toMail)) {
return JsonData.fail("用戶郵箱不能爲空");
}
//TODO 隨機生成密碼
String defaultPassword = PasswordCreateUtil.createPassWord(8);
User user = new User();
user.setUserId(userId);
user.setUserPassword(defaultPassword);
int count = userService.updateUser(user);
if (count > 0) {
mailService.sendSimpleMail(toMail, "重置密碼", "您的初始密碼爲:" + defaultPassword);
return JsonData.success(count, "重置密碼成功");
} else {
return JsonData.fail("重置密碼失敗");
}
}
/**
* @param len
* @return : java.lang.String
* @author: zhupeng
* @date: 2020-03-24 21:19
* @description: 指定長度生成隨機密碼
*/
public static String createPassWord(int len) {
int random = createRandomInt();
return createPassWord(random, len);
}
private static String createPassWord(int random, int len) {
Random rd = new Random(random);
final int maxNum = 62;
StringBuffer sb = new StringBuffer();
int rdGet;//取得隨機數
char[] str = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
int count = 0;
while (count < len) {
//生成的數最大爲62-1
rdGet = Math.abs(rd.nextInt(maxNum));
if (rdGet >= 0 && rdGet < str.length) {
sb.append(str[rdGet]);
count++;
}
}
return sb.toString();
}
private static int createRandomInt() {
//得到0.0到1.0之間的數字,並擴大100000倍
double temp = Math.random() * 100000;
//如果數據等於100000,則減少1
if (temp >= 100000) {
temp = 99999;
}
int tempint = (int) Math.ceil(temp);
return tempint;
}
2.將生成的密碼賦值給新的user,更新數據庫user信息。
/**
* @Desc 更新用戶
* @Param
* @return
* @Date 2020/3/21 17:39
*/
@Override
public int updateUser(User user) {
if (checkUserNameExist(user.getUserName(), user.getUserId())) {
throw new ParamException("用戶名已被佔用");
}
if (checkUserTrueNameExist(user.getUserTrueName(), user.getUserId())) {
throw new ParamException("真實姓名已經存在");
}
if (checkUserEmailExist(user.getUserEmail(), user.getUserId())) {
throw new ParamException("郵箱已被佔用");
}
if (checkUserPhoneExist(user.getUserPhone(), user.getUserId())) {
throw new ParamException("手機號已被佔用");
}
User before = userMapper.selectByPrimaryKey(user.getUserId());
Preconditions.checkNotNull(before, "需更新的用戶不存在");
User after = User.builder()
.userId(user.getUserId())
.userName(user.getUserName())
.userTrueName(user.getUserTrueName())
.userPassword(Md5Util.md5(user.getUserPassword(), Md5Util.SALT))
.userEmail(user.getUserEmail())
.userPhone(user.getUserPhone())
.userState(user.getUserState())
.build();
int count = userMapper.updateByPrimaryKeySelective(after);
return count;
}
3.數據庫更新成功後,再去發生郵箱給重置人的郵箱。
@Resource
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;
/**
* @Desc 發送簡單郵件
* @Param
* @return
* @Date 2020/3/21 17:36
*/
@Override
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try {
mailSender.send(message);
log.info("簡單郵件發送成功!");
} catch (MailException e) {
log.error("發送簡單郵件時發生異常!" + e);
}
}
//複雜郵件
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
messageHelper.setFrom("[email protected]");
messageHelper.setTo("[email protected]");
messageHelper.setSubject("Happy New Year");
messageHelper.setText("新年快樂!");
messageHelper.addInline("doge.gif", new File("xx/xx/doge.gif"));
messageHelper.addAttachment("work.docx", new File("xx/xx/work.docx"));
mailSender.send(mimeMessage);
4.實戰效果