Commit bd86b89ea53226071a07a0e821d2ad00bea8e028
1 parent
132c8b0e
邮件发送 FIXME部分需要详细说明一下
Showing
5 changed files
with
76 additions
and
2 deletions
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailAccountController.java
| @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccou | @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccou | ||
| 7 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; | 7 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; |
| 8 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; | 8 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; |
| 9 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; | 9 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; |
| 10 | +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailSendVO; | ||
| 10 | import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; | 11 | import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; |
| 11 | import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | 12 | import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; |
| 12 | import cn.iocoder.yudao.module.system.service.mail.MailAccountService; | 13 | import cn.iocoder.yudao.module.system.service.mail.MailAccountService; |
| @@ -81,4 +82,11 @@ public class MailAccountController { | @@ -81,4 +82,11 @@ public class MailAccountController { | ||
| 81 | list.sort(Comparator.comparing(MailAccountDO::getId)); | 82 | list.sort(Comparator.comparing(MailAccountDO::getId)); |
| 82 | return success(MailAccountConvert.INSTANCE.convertList02(list)); | 83 | return success(MailAccountConvert.INSTANCE.convertList02(list)); |
| 83 | } | 84 | } |
| 85 | + @PostMapping("/send") | ||
| 86 | + @ApiOperation("发送邮件") | ||
| 87 | + @PreAuthorize("@ss.hasPermission('system:mail-account:send')") | ||
| 88 | + public CommonResult<Boolean> sendMail(MailSendVO mailSendVO){ | ||
| 89 | + mailAccountService.sendMail(mailSendVO); | ||
| 90 | + return success(true); | ||
| 91 | + } | ||
| 84 | } | 92 | } |
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/send/MailSendVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.system.controller.admin.mail.vo.send; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import java.util.List; | ||
| 7 | +@Data | ||
| 8 | +public class MailSendVO { | ||
| 9 | + | ||
| 10 | + @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com") | ||
| 11 | + private String from; | ||
| 12 | + | ||
| 13 | + @ApiModelProperty(value = "标题" , example = "标题") | ||
| 14 | + private String title; | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "内容" , example = "内容") | ||
| 17 | + private String content; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "收件人" , required = true , example = "yudaoyuanma@123.com") | ||
| 20 | + private List<String> tos; | ||
| 21 | + | ||
| 22 | + @ApiModelProperty(value = "附件" , example = "附件编码") | ||
| 23 | + private List<String> fileIds; | ||
| 24 | + | ||
| 25 | + | ||
| 26 | +} |
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/mail/MailAccountDO.java
| @@ -16,7 +16,7 @@ import lombok.experimental.Accessors; | @@ -16,7 +16,7 @@ import lombok.experimental.Accessors; | ||
| 16 | @Data | 16 | @Data |
| 17 | @EqualsAndHashCode(callSuper = true) | 17 | @EqualsAndHashCode(callSuper = true) |
| 18 | @Accessors(chain = true) | 18 | @Accessors(chain = true) |
| 19 | -@ApiModel(value="MailAccount对象", description="") | 19 | +@ApiModel(value="MailAccount对象", description="邮箱账号") |
| 20 | @TableName(value = "system_mail_account", autoResultMap = true) | 20 | @TableName(value = "system_mail_account", autoResultMap = true) |
| 21 | public class MailAccountDO extends BaseDO implements Serializable { | 21 | public class MailAccountDO extends BaseDO implements Serializable { |
| 22 | 22 | ||
| @@ -37,7 +37,7 @@ public class MailAccountDO extends BaseDO implements Serializable { | @@ -37,7 +37,7 @@ public class MailAccountDO extends BaseDO implements Serializable { | ||
| 37 | private String host; | 37 | private String host; |
| 38 | 38 | ||
| 39 | @TableField("port") | 39 | @TableField("port") |
| 40 | - private String port; | 40 | + private Integer port; |
| 41 | 41 | ||
| 42 | @TableField("sslEnable") | 42 | @TableField("sslEnable") |
| 43 | private Boolean sslEnable; | 43 | private Boolean sslEnable; |
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountService.java
| @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; | 4 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; |
| 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; | 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; |
| 6 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; | 6 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; |
| 7 | +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailSendVO; | ||
| 7 | import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | 8 | import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; |
| 8 | 9 | ||
| 9 | import java.util.List; | 10 | import java.util.List; |
| @@ -30,4 +31,6 @@ public interface MailAccountService { | @@ -30,4 +31,6 @@ public interface MailAccountService { | ||
| 30 | PageResult<MailAccountDO> getMailAccountPage(MailAccountPageReqVO pageReqVO); | 31 | PageResult<MailAccountDO> getMailAccountPage(MailAccountPageReqVO pageReqVO); |
| 31 | 32 | ||
| 32 | List<MailAccountDO> getMailAccountList(); | 33 | List<MailAccountDO> getMailAccountList(); |
| 34 | + | ||
| 35 | + void sendMail(MailSendVO mailSendVO); | ||
| 33 | } | 36 | } |
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailAccountServiceImpl.java
| 1 | package cn.iocoder.yudao.module.system.service.mail.impl; | 1 | package cn.iocoder.yudao.module.system.service.mail.impl; |
| 2 | 2 | ||
| 3 | +import cn.hutool.extra.mail.MailAccount; | ||
| 4 | +import cn.hutool.extra.mail.MailUtil; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; | 6 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; |
| 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; | 7 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; |
| 6 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; | 8 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; |
| 9 | +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailSendVO; | ||
| 7 | import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; | 10 | import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; |
| 8 | import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | 11 | import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; |
| 12 | +import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; | ||
| 9 | import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper; | 13 | import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper; |
| 14 | +import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; | ||
| 10 | import cn.iocoder.yudao.module.system.service.mail.MailAccountService; | 15 | import cn.iocoder.yudao.module.system.service.mail.MailAccountService; |
| 11 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 16 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| 12 | import org.springframework.stereotype.Service; | 17 | import org.springframework.stereotype.Service; |
| @@ -35,6 +40,9 @@ public class MailAccountServiceImpl implements MailAccountService { | @@ -35,6 +40,9 @@ public class MailAccountServiceImpl implements MailAccountService { | ||
| 35 | @Resource | 40 | @Resource |
| 36 | private MailAccountMapper mailAccountMapper; | 41 | private MailAccountMapper mailAccountMapper; |
| 37 | 42 | ||
| 43 | + @Resource | ||
| 44 | + private MailTemplateMapper mailTemplateMapper; | ||
| 45 | + | ||
| 38 | @Override | 46 | @Override |
| 39 | public Long create(MailAccountCreateReqVO createReqVO) { | 47 | public Long create(MailAccountCreateReqVO createReqVO) { |
| 40 | // username 要校验唯一 | 48 | // username 要校验唯一 |
| @@ -81,6 +89,35 @@ public class MailAccountServiceImpl implements MailAccountService { | @@ -81,6 +89,35 @@ public class MailAccountServiceImpl implements MailAccountService { | ||
| 81 | return mailAccountMapper.selectList(); | 89 | return mailAccountMapper.selectList(); |
| 82 | } | 90 | } |
| 83 | 91 | ||
| 92 | + @Override | ||
| 93 | + public void sendMail(MailSendVO mailSendVO) { | ||
| 94 | + // FIXME 查询模版信息 查询模版多条时 使用规则是什么 | ||
| 95 | + List<MailTemplateDO> mailTemplateDOList = mailTemplateMapper.selectList( | ||
| 96 | + "username",mailSendVO.getFrom() | ||
| 97 | + ); | ||
| 98 | + //查询账号信息 | ||
| 99 | + MailAccountDO mailAccountDO = mailAccountMapper.selectOne( | ||
| 100 | + "from",mailSendVO.getFrom() | ||
| 101 | + ); | ||
| 102 | + // FIXME 模版和邮件内容合成方式未知 | ||
| 103 | + String content = mailSendVO.getContent(); | ||
| 104 | + String templateContent = ""; | ||
| 105 | + // 后续功能 TODO :附件查询 | ||
| 106 | + //List<String> fileIds = mailSendVO.getFileIds(); | ||
| 107 | + | ||
| 108 | + //装载账号信息 | ||
| 109 | + MailAccount account = new MailAccount(); | ||
| 110 | + account.setHost(mailAccountDO.getHost()); | ||
| 111 | + account.setPort(mailAccountDO.getPort()); | ||
| 112 | + account.setAuth(true); | ||
| 113 | + account.setFrom(mailAccountDO.getFrom()); | ||
| 114 | + account.setUser(mailAccountDO.getUsername()); | ||
| 115 | + account.setPass(mailAccountDO.getPassword()); | ||
| 116 | + account.setSslEnable(mailAccountDO.getSslEnable()); | ||
| 117 | + //发送 | ||
| 118 | + MailUtil.send(account , mailSendVO.getTos() , mailSendVO.getTitle() , mailSendVO.getContent() , false); | ||
| 119 | + } | ||
| 120 | + | ||
| 84 | private void validateMailAccountExists(Long id) { | 121 | private void validateMailAccountExists(Long id) { |
| 85 | if (mailAccountMapper.selectById(id) == null) { | 122 | if (mailAccountMapper.selectById(id) == null) { |
| 86 | throw exception(MAIL_ACCOUNT_NOT_EXISTS); | 123 | throw exception(MAIL_ACCOUNT_NOT_EXISTS); |