package org.jeecg.modules.message.handle.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.StaticConfig; import org.jeecg.modules.message.handle.ISendMsgHandle; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; /** * @Description: 邮箱发送信息 * @author: jeecg-boot */ @Slf4j @Component("emailSendMsgHandle") public class EmailSendMsgHandle implements ISendMsgHandle { static String emailFrom; public static void setEmailFrom(String emailFrom) { EmailSendMsgHandle.emailFrom = emailFrom; } @Autowired SysUserMapper sysUserMapper; @Autowired private RedisUtil redisUtil; @Override public void sendMsg(String esReceiver, String esTitle, String esContent) { JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender"); MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = null; //update-begin-author:taoyan date:20200811 for:配置类数据获取 if(oConvertUtils.isEmpty(emailFrom)){ StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class); setEmailFrom(staticConfig.getEmailFrom()); } //update-end-author:taoyan date:20200811 for:配置类数据获取 try { helper = new MimeMessageHelper(message, true); // 设置发送方邮箱地址 helper.setFrom(emailFrom); helper.setTo(esReceiver); helper.setSubject(esTitle); helper.setText(esContent, true); mailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); } } @Override public void sendMessage(MessageDTO messageDTO) { String[] arr = messageDTO.getToUser().split(","); LambdaQueryWrapper query = new LambdaQueryWrapper().in(SysUser::getUsername, arr); List list = sysUserMapper.selectList(query); String content = messageDTO.getContent(); String title = messageDTO.getTitle(); String realNameExp = "{REALNAME}"; for(SysUser user: list){ String email = user.getEmail(); if(email==null || "".equals(email)){ continue; } if(content.indexOf(realNameExp)>0){ content = content.replace(realNameExp, user.getRealname()); } if(content.indexOf(CommonConstant.LOGIN_TOKEN)>0){ String token = getToken(user); try { content = content.replace(CommonConstant.LOGIN_TOKEN, URLEncoder.encode(token, "UTF-8")); } catch (UnsupportedEncodingException e) { log.error("邮件消息token编码失败", e.getMessage()); } } log.info("邮件内容:"+ content); sendMsg(email, title, content); } } /** * 获取token * @param user * @return */ private String getToken(SysUser user) { // 生成token String token = JwtUtil.sign(user.getUsername(), user.getPassword()); redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); // 设置超时时间 1个小时 redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 1 / 1000); return token; } }