邮箱模块:完善 log 相关的逻辑

This commit is contained in:
YunaiV
2023-01-26 20:39:38 +08:00
parent f9ab45df18
commit 525078abd3
19 changed files with 388 additions and 266 deletions

View File

@ -3,23 +3,20 @@ package cn.iocoder.yudao.module.system.controller.admin.mail;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.*;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogRespVO;
import cn.iocoder.yudao.module.system.convert.mail.MailLogConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailLogDO;
import cn.iocoder.yudao.module.system.service.mail.MailLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import javax.annotation.Resource;
import javax.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -29,7 +26,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@RequestMapping("/system/mail-log")
public class MailLogController {
@Autowired
@Resource
private MailLogService mailLogService;
@GetMapping("/page")
@ -40,14 +37,4 @@ public class MailLogController {
return success(MailLogConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@ApiOperation("导出邮箱日志Excel")
@PreAuthorize("@ss.hasPermission('system:mail-log:export')")
public void exportMailLogExcel(@Valid MailLogExportReqVO exportReqVO ,
HttpServletResponse response) throws IOException {
List<MailLogDO> list = mailLogService.getMailLogList(exportReqVO);
// 导出 Excel
List<MailLogExcelVO> datas = MailLogConvert.INSTANCE.convertList(list);
ExcelUtils.write(response, "邮箱日志.xls", "数据", MailLogExcelVO.class, datas);
}
}

View File

@ -1,46 +1,76 @@
package cn.iocoder.yudao.module.system.controller.admin.mail.vo.log;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.sql.Timestamp;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("管理后台 - 邮箱日志基类 Base VO")
/**
* 邮件日志 Base VO提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
@Data
public class MailLogBaseVO {
@ApiModelProperty(value = "邮箱" , required = false , example = "yudaoyuanma@123.com")
private String from;
@ApiModelProperty(value = "用户编号", example = "30883")
private Long userId;
@ApiModelProperty(value = "模版编号" , required = false , example = "templeId")
private String templateId;
@ApiModelProperty(value = "用户类型", example = "2", notes = "参见 UserTypeEnum 枚举")
private Byte userType;
@ApiModelProperty(value = "模版code" , required = false , example = "templeCode")
@ApiModelProperty(value = "接收邮箱地址", required = true, example = "76854@qq.com")
@NotNull(message = "接收邮箱地址不能为空")
private String toMail;
@ApiModelProperty(value = "邮箱账号编号", required = true, example = "18107")
@NotNull(message = "邮箱账号编号不能为空")
private Long accountId;
@ApiModelProperty(value = "发送邮箱地址", required = true, example = "85757@qq.com")
@NotNull(message = "发送邮箱地址不能为空")
private String fromMail;
@ApiModelProperty(value = "模板编号", required = true, example = "5678")
@NotNull(message = "模板编号不能为空")
private Long templateId;
@ApiModelProperty(value = "模板编码", required = true, example = "test_01")
@NotNull(message = "模板编码不能为空")
private String templateCode;
@ApiModelProperty(value = "标题" , required = false , example = "芋道源码")
private String title;
@ApiModelProperty(value = "模版发送人名称", example = "李四")
private String templateNickname;
@ApiModelProperty(value = "内容" , required = false , example = "遇到源码")
private String content;
@ApiModelProperty(value = "邮件标题", required = true, example = "测试标题")
@NotNull(message = "邮件标题不能为空")
private String templateTitle;
@ApiModelProperty(value = "收件人" , required = false , example = "yudaoyuanma@456.com")
private String to;
@ApiModelProperty(value = "邮件内容", required = true, example = "测试内容")
@NotNull(message = "邮件内容不能为空")
private String templateContent;
@ApiModelProperty(value = "邮件参数", required = true)
@NotNull(message = "邮件参数不能为空")
private Map<String, Object> templateParams;
@ApiModelProperty(value = "发送状态", required = true, example = "1", notes = "参见 MailSendStatusEnum 枚举")
@NotNull(message = "发送状态不能为空")
private Byte sendStatus;
@ApiModelProperty(value = "发送时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "发送时间" , required = false , example = "2022-03-26 03:45:20")
private Timestamp sendTime;
private LocalDateTime sendTime;
@ApiModelProperty(value = "发送状态" , required = false , example = "1")
private Boolean sendStatus;
@ApiModelProperty(value = "发送返回的消息 ID", example = "28568")
private String sendMessageId;
@ApiModelProperty(value = "发送结果" , required = false , example = "yudaoyuanma@123.com")
private String sendResult;
@ApiModelProperty(value = "发送异常")
private String sendException;
}

View File

@ -1,42 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.mail.vo.log;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.sql.Timestamp;
import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("管理后台 - 邮箱日志导出 Request VO")
@Data
public class MailLogExcelVO {
@ExcelProperty(value = "邮箱" )
private String from;
@ExcelProperty(value = "模版编号" )
private String templeCode;
@ExcelProperty(value = "标题")
private String title;
@ExcelProperty(value = "内容")
private String content;
@ExcelProperty(value = "收件人" )
private String to;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ExcelProperty(value = "发送时间" )
private Date sendTime;
@ExcelProperty(value = "发送状态")
private Integer sendStatus;
@ExcelProperty(value = "发送结果")
private String sendResult;
}

View File

@ -1,9 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.mail.vo.log;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@ApiModel("管理后台 - 邮箱日志导出 Request VO")
@Data
public class MailLogExportReqVO extends MailLogPageReqVO {
}

View File

@ -9,6 +9,7 @@ import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ -18,33 +19,26 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@ToString(callSuper = true)
public class MailLogPageReqVO extends PageParam {
// TODO @wangjingyirequired 为 false 时,它是默认值,所以不用谢 DONE
@ApiModelProperty(value = "用户编号", example = "30883")
private Long userId;
@ApiModelProperty(value = "邮箱" , example = "yudaoyuanma@123.com")
private String from;
@ApiModelProperty(value = "用户类型", example = "2", notes = "参见 UserTypeEnum 枚举")
private Byte userType;
@ApiModelProperty(value = "模版编号" , required = false , example = "templeId")
private String templateId;
@ApiModelProperty(value = "接收邮箱地址", example = "76854@qq.com", notes = "模糊匹配")
private String toMail;
@ApiModelProperty(value = "模版code" , required = false , example = "templeCode")
private String templateCode;
@ApiModelProperty(value = "邮箱账号编号", example = "18107")
private Long accountId;
@ApiModelProperty(value = "标题" , required = false , example = "芋道源码")
private String title;
@ApiModelProperty(value = "模板编号", example = "5678")
private Long templateId;
@ApiModelProperty(value = "内容" , required = false , example = "遇到源码")
private String content;
@ApiModelProperty(value = "收件人" , required = false , example = "yudaoyuanma@456.com")
private String to;
@ApiModelProperty(value = "发送状态", example = "1", notes = "参见 MailSendStatusEnum 枚举")
private Integer sendStatus;
@ApiModelProperty(value = "发送时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "发送时间" , required = false , example = "2022-03-26 03:45:20")
private Timestamp sendTime;
private LocalDateTime[] sendTime;
@ApiModelProperty(value = "发送状态" , required = false , example = "1")
private Boolean sendStatus;
@ApiModelProperty(value = "发送结果" , required = false , example = "yudaoyuanma@123.com")
private String sendResult;
}

View File

@ -1,44 +1,19 @@
package cn.iocoder.yudao.module.system.controller.admin.mail.vo.log;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.*;
import java.time.LocalDateTime;
import io.swagger.annotations.*;
import java.sql.Timestamp;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("管理后台 - 邮箱日志返回 Request VO")
@ApiModel("管理后台 - 邮件日志 Response VO")
@Data
public class MailLogRespVO {
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MailLogRespVO extends MailLogBaseVO {
@ApiModelProperty(value = "邮箱" , required = false , example = "yudaoyuanma@123.com")
private String from;
@ApiModelProperty(value = "编号", required = true, example = "31020")
private Long id;
@ApiModelProperty(value = "模版编号" , required = false , example = "templeId")
private String templateId;
@ApiModelProperty(value = "模版code" , required = false , example = "templeCode")
private String templateCode;
@ApiModelProperty(value = "标题" , required = false , example = "芋道源码")
private String title;
@ApiModelProperty(value = "内容" , required = false , example = "遇到源码")
private String content;
@ApiModelProperty(value = "收件人" , required = false , example = "yudaoyuanma@456.com")
private String to;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "发送时间" , required = false , example = "2022-03-26 03:45:20")
private Timestamp sendTime;
@ApiModelProperty(value = "发送状态" , required = false , example = "1")
private Integer sendStatus;
@ApiModelProperty(value = "发送结果" , required = false , example = "yudaoyuanma@123.com")
private String sendResult;
@ApiModelProperty(value = "创建时间", required = true)
private LocalDateTime createTime;
}

View File

@ -1,18 +1,16 @@
package cn.iocoder.yudao.module.system.convert.mail;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.mail.MailAccount;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountBaseVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountRespVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountSimpleRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Mapper
public interface MailAccountConvert {
@ -27,25 +25,11 @@ public interface MailAccountConvert {
List<MailAccountSimpleRespVO> convertList02(List<MailAccountDO> list);
// TODO 芋艿:改下
default MailAccount convertAccount(MailSendMessage bean) {
return new MailAccount()
.setHost(bean.getHost())
.setPort(bean.getPort())
.setAuth(true)
.setFrom(bean.getMail())
.setUser(bean.getUsername())
.setPass(bean.getPassword())
.setSslEnable(bean.getSslEnable());
}
// TODO 芋艿:改下
default Map<String, String> convertToMap(MailAccountDO mailAccountDO , String content) {
Map<String , String> map = new HashMap<>();
map.put("from_address" , mailAccountDO.getMail());
map.put("username" , mailAccountDO.getUsername());
map.put("content" , content);
return map;
default MailAccount convert(MailAccountDO account, String nickname) {
String from = StrUtil.isNotEmpty(nickname) ? nickname + " <" + account.getMail() + ">" : account.getMail();
return new MailAccount().setFrom(from).setAuth(true)
.setUser(account.getUsername()).setPass(account.getPassword())
.setHost(account.getHost()).setPort(account.getPort()).setSslEnable(account.getSslEnable());
}
}

View File

@ -1,19 +1,16 @@
package cn.iocoder.yudao.module.system.convert.mail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExcelVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailLogDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface MailLogConvert {
MailLogConvert INSTANCE = Mappers.getMapper(MailLogConvert.class);
PageResult<MailLogRespVO> convertPage(PageResult<MailLogDO> pageResult);
List<MailLogExcelVO> convertList(List<MailLogDO> list);
}

View File

@ -114,8 +114,8 @@ public class MailLogDO extends BaseDO implements Serializable {
*/
private String sendMessageId;
/**
* 发送结果
* 发送异常
*/
private String sendResult;
private String sendException;
}

View File

@ -2,41 +2,25 @@ package cn.iocoder.yudao.module.system.dal.mysql.mail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExportReqVO;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailLogDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MailLogMapper extends BaseMapperX<MailLogDO> {
default PageResult<MailLogDO> selectPage(MailLogPageReqVO pageVO){
return selectPage(pageVO , new QueryWrapperX<MailLogDO>()
.eqIfPresent("from", pageVO.getFrom())
.eqIfPresent("templeCode", pageVO.getTemplateCode())
.likeIfPresent("title" , pageVO.getTitle())
.likeIfPresent("content" , pageVO.getContent())
.eqIfPresent("to", pageVO.getTo())
.eqIfPresent("sendTime" , pageVO.getSendTime())
.eqIfPresent("sendStatus" , pageVO.getSendStatus())
.eqIfPresent("sendResult" , pageVO.getSendResult())
.orderByDesc("sendTime")
);
};
default PageResult<MailLogDO> selectPage(MailLogPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<MailLogDO>()
.eqIfPresent(MailLogDO::getUserId, reqVO.getUserId())
.eqIfPresent(MailLogDO::getUserType, reqVO.getUserType())
.likeIfPresent(MailLogDO::getToMail, reqVO.getToMail())
.eqIfPresent(MailLogDO::getAccountId, reqVO.getAccountId())
.likeIfPresent(MailLogDO::getFromMail, reqVO.getFromMail())
.eqIfPresent(MailLogDO::getTemplateId, reqVO.getTemplateId())
.eqIfPresent(MailLogDO::getSendStatus, reqVO.getSendStatus())
.betweenIfPresent(MailLogDO::getSendTime, reqVO.getSendTime())
.orderByDesc(MailLogDO::getId));
}
default List<MailLogDO> selectList(MailLogExportReqVO exportReqVO){
return selectList(new QueryWrapperX<MailLogDO>()
.eqIfPresent("from", exportReqVO.getFrom())
.eqIfPresent("templeCode", exportReqVO.getTemplateCode())
.likeIfPresent("title" , exportReqVO.getTitle())
.likeIfPresent("content" , exportReqVO.getContent())
.eqIfPresent("to", exportReqVO.getTo())
.eqIfPresent("sendTime" , exportReqVO.getSendTime())
.eqIfPresent("sendStatus" , exportReqVO.getSendStatus())
.eqIfPresent("sendResult" , exportReqVO.getSendResult())
.orderByDesc("sendTime")
);
};
}

View File

@ -1,13 +1,11 @@
package cn.iocoder.yudao.module.system.service.mail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailLogDO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
import java.util.List;
import java.util.Map;
/**
@ -26,42 +24,30 @@ public interface MailLogService {
*/
PageResult<MailLogDO> getMailLogPage(MailLogPageReqVO pageVO);
/**
* 邮件日志数组信息
*
* @param exportReqVO 导出筛选请求
* @return 导出的日志数据
*/
List<MailLogDO> getMailLogList(MailLogExportReqVO exportReqVO);
/**
* 创建邮件日志
*
* @param userId 用户编码
* @param userType 用户类型
* @param to 收件人
* @param mailAccountDO 邮件账号信息
* @param toMail 收件人邮件
* @param account 邮件账号信息
* @param template 模版信息
* @param templateContent 模版内容
* @param templateParams 模版参数
* @param isSend 是否发送成功
* @return 日志编号
*/
Long createMailLog(Long userId,Integer userType,String to,MailAccountDO mailAccountDO, MailTemplateDO template , String templateContent, Map<String, Object> templateParams, Boolean isSend);
Long createMailLog(Long userId,Integer userType, String toMail,
MailAccountDO account, MailTemplateDO template ,
String templateContent, Map<String, Object> templateParams, Boolean isSend);
/**
* 更新邮件发送结果
*
* @param logId 发送日志Id
* @param result 发送结果 默认返回messageId
* @param logId 日志编号
* @param messageId 发送后的消息编号
* @param exception 发送异常
*/
void updateMailSendResult(Long logId, String result);
/**
* 更新邮件发送结果
*
* @param logId 发送日志Id
* @param exception 发送结果
*/
void updateFailMailSendResult(Long logId, String exception);
void updateMailSendResult(Long logId, String messageId, Exception exception);
}

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.system.service.mail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailLogDO;
@ -13,10 +12,11 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static cn.hutool.core.exceptions.ExceptionUtil.getRootCauseMessage;
/**
* 邮件日志 Service 实现类
*
@ -35,11 +35,6 @@ public class MailLogServiceImpl implements MailLogService {
return mailLogMapper.selectPage(pageVO);
}
@Override
public List<MailLogDO> getMailLogList(MailLogExportReqVO exportReqVO) {
return mailLogMapper.selectList(exportReqVO);
}
@Override
public Long createMailLog(Long userId, Integer userType, String toMail,
MailAccountDO account, MailTemplateDO template,
@ -61,20 +56,18 @@ public class MailLogServiceImpl implements MailLogService {
return logDO.getId();
}
// TODO @wangjingyi还是加几个字段哈日志上。sendStatus成功、失败messageId 消息标号。sendException 记录发送的异常。这样界面才好筛选邮件的发送结果。DONE
@Override
public void updateMailSendResult(Long logId, String result) {
MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder();
logDOBuilder.id(logId).sendTime(new Date()).sendResult(result).sendMessageId(result).sendStatus(MailSendStatusEnum.SUCCESS.getStatus());
MailLogDO mailLogDO = logDOBuilder.build();
mailLogMapper.updateById(mailLogDO);
public void updateMailSendResult(Long logId, String messageId, Exception exception) {
// 1. 成功
if (exception == null) {
mailLogMapper.updateById(new MailLogDO().setId(logId).setSendTime(new Date())
.setSendStatus(MailSendStatusEnum.SUCCESS.getStatus()).setSendMessageId(messageId));
return;
}
// 2. 失败
mailLogMapper.updateById(new MailLogDO().setId(logId).setSendTime(new Date())
.setSendStatus(MailSendStatusEnum.FAILURE.getStatus()).setSendException(getRootCauseMessage(exception)));
}
@Override
public void updateFailMailSendResult(Long logId, String exception) {
MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder();
logDOBuilder.id(logId).sendTime(new Date()).sendResult(exception).sendStatus(MailSendStatusEnum.FAILURE.getStatus());
MailLogDO mailLogDO = logDOBuilder.build();
mailLogMapper.updateById(mailLogDO);
}
}

View File

@ -9,14 +9,9 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper;
import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer;
import cn.iocoder.yudao.module.system.service.mail.MailLogService;
import cn.iocoder.yudao.module.system.service.mail.MailSendService;
import cn.iocoder.yudao.module.system.service.mail.MailTemplateService;
import cn.iocoder.yudao.module.system.service.member.MemberService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.google.common.annotations.VisibleForTesting;
@ -111,15 +106,18 @@ public class MailSendServiceImpl implements MailSendService {
@Override
public void doSendMail(MailSendMessage message) {
// 装载账号信息
MailAccount mailAccount = MailAccountConvert.INSTANCE.convertAccount(message);
// 发送邮件
// 1. 创建发送账号
MailAccountDO account = checkMailAccountValid(message.getAccountId());
MailAccount mailAccount = MailAccountConvert.INSTANCE.convert(account, message.getNickname());
// 2. 发送邮件
try {
String messageId = MailUtil.send(mailAccount, message.getMail(),
message.getTitle(), message.getContent(),true);
mailLogService.updateMailSendResult(message.getLogId() , messageId);
} catch (Exception e){
mailLogService.updateFailMailSendResult(message.getLogId() , e.getMessage());
// 3. 更新结果(成功)
mailLogService.updateMailSendResult(message.getLogId(), messageId, null);
} catch (Exception e) {
// 3. 更新结果(异常)
mailLogService.updateMailSendResult(message.getLogId(), null, e);
}
}
@ -170,4 +168,5 @@ public class MailSendServiceImpl implements MailSendService {
return new KeyValue<>(key, value);
}).collect(Collectors.toList());
}
}