diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/enums/EmailType.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/enums/EmailType.java new file mode 100644 index 00000000..322c1de5 --- /dev/null +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/enums/EmailType.java @@ -0,0 +1,62 @@ +/** + * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package org.opsli.modulars.tools.email.enums; + +/** + * Email 参数类型 + * + * @author Parker + */ +public enum EmailType { + + /** SMTP 服务 */ + EMAIL_SMTP("email_smtp", "SMTP地址"), + EMAIL_PORT("email_port", "SMTP端口"), + EMAIL_SSL_ENABLE("email_ssl_enable", "开启SSL认证"), + EMAIL_ACCOUNT("email_account", "邮箱账号"), + EMAIL_PASSWORD("email_password", "邮箱账号密码"), + EMAIL_ADDRESSER("email_addresser", "发件人"), + + ; + + private final String code; + private final String desc; + + public static EmailType getType(String cacheType) { + EmailType[] var1 = values(); + for (EmailType type : var1) { + if (type.code.equalsIgnoreCase(cacheType)) { + return type; + } + } + return null; + } + + public String getCode() { + return this.code; + } + + public String getDesc() { + return this.desc; + } + + // ================= + + EmailType(final String code, final String desc) { + this.code = code; + this.desc = desc; + } +} diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/service/impl/EmailServiceImpl.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/service/impl/EmailServiceImpl.java new file mode 100644 index 00000000..89aa20f1 --- /dev/null +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/service/impl/EmailServiceImpl.java @@ -0,0 +1,103 @@ +package org.opsli.modulars.tools.email.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.extra.mail.MailAccount; +import cn.hutool.extra.mail.MailUtil; +import org.opsli.api.wrapper.system.options.OptionsModel; +import org.opsli.common.enums.DictType; +import org.opsli.core.utils.OptionsUtil; +import org.opsli.core.utils.ValidationUtil; +import org.opsli.modulars.tools.email.enums.EmailType; +import org.opsli.modulars.tools.email.service.IEmailService; +import org.opsli.modulars.tools.email.wrapper.EmailModel; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.Collections; + +/** + * @BelongsProject: opsli-boot + * @BelongsPackage: org.opsli.modulars.tools.email.service + * @Author: Parker + * @CreateTime: 2020-09-16 17:34 + * @Description: 邮件 接口实现类 + */ +@Service +public class EmailServiceImpl implements IEmailService { + + + @Override + public String send(String to, String subject, String content) { + // 发送邮件 + return this.send(Collections.singletonList(to), subject ,content); + } + + @Override + public String send(Collection tos, String subject, String content) { + // 发送邮件 + return this.send(tos, subject ,content, false); + } + + @Override + public String send(String to, String subject, String content, boolean isHtml) { + // 发送邮件 + return this.send(Collections.singletonList(to), subject ,content, isHtml); + } + + @Override + public String send(Collection tos, String subject, String content, boolean isHtml) { + + // 校验发送邮件数据是否正确 + for (String to : tos) { + EmailModel emailModel = new EmailModel(); + emailModel.setTo(to); + emailModel.setSubject(subject); + emailModel.setContent(content); + ValidationUtil.verify(emailModel); + } + + // 获得配置信息 + MailAccount mailAccount = this.getMailAccount(); + + // 发送邮件 + return MailUtil.send(mailAccount, tos , subject ,content, isHtml); + } + + /** + * 获得 配置信息 + * @return MailAccount + */ + private MailAccount getMailAccount(){ + // 获得配置数据 + OptionsModel smtp = OptionsUtil.getOptionByCode(EmailType.EMAIL_SMTP.getCode()); + OptionsModel port = OptionsUtil.getOptionByCode(EmailType.EMAIL_PORT.getCode()); + OptionsModel sslEnable = OptionsUtil.getOptionByCode(EmailType.EMAIL_SSL_ENABLE.getCode()); + OptionsModel account = OptionsUtil.getOptionByCode(EmailType.EMAIL_ACCOUNT.getCode()); + OptionsModel password = OptionsUtil.getOptionByCode(EmailType.EMAIL_PASSWORD.getCode()); + OptionsModel addresser = OptionsUtil.getOptionByCode(EmailType.EMAIL_ADDRESSER.getCode()); + + MailAccount mailAccount = new MailAccount(); + mailAccount.setAuth(true); + if(smtp != null){ + mailAccount.setHost(smtp.getOptionValue()); + } + if(port != null){ + mailAccount.setPort(Convert.toInt(port.getOptionValue())); + } + if(sslEnable != null){ + mailAccount.setSslEnable( + DictType.NO_YES_YES.getValue().equals(sslEnable.getOptionValue())); + } + if(account != null){ + mailAccount.setUser(account.getOptionValue()); + } + if(password != null){ + mailAccount.setPass(password.getOptionValue()); + } + if(addresser != null){ + mailAccount.setFrom(addresser.getOptionValue()); + } + + return mailAccount; + } +} diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/web/EmailRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/web/EmailRestController.java new file mode 100644 index 00000000..3be9da61 --- /dev/null +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/web/EmailRestController.java @@ -0,0 +1,47 @@ +package org.opsli.modulars.tools.email.web; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.opsli.api.base.result.ResultVo; +import org.opsli.common.annotation.ApiRestController; +import org.opsli.modulars.tools.email.service.IEmailService; +import org.opsli.modulars.tools.email.wrapper.EmailModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; + + +/** + * @BelongsProject: opsli-boot + * @BelongsPackage: org.opsli.modulars.tools.email.web + * @Author: Parker + * @CreateTime: 2020-09-13 17:40 + * @Description: 邮件 Controller + */ +@Api(tags = "邮件类") +@Slf4j +@ApiRestController("/email") +public class EmailRestController { + + @Autowired + private IEmailService iEmailService; + + /** + * 测试发送邮件 + * @param model 模型 + * @return ResultVo + */ + @ApiOperation(value = "测试发送邮件", notes = "测试发送邮件") + @PostMapping("/testSend") + public ResultVo testSend(EmailModel model) { + try { + String result = iEmailService + .send(model.getTo(), model.getSubject(), model.getContent()); + return ResultVo.success(result); + }catch (Exception e){ + return ResultVo.error("邮件发送失败 - " + e.getMessage()); + } + } + + +} diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/wrapper/EmailModel.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/wrapper/EmailModel.java new file mode 100644 index 00000000..1194a101 --- /dev/null +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/tools/email/wrapper/EmailModel.java @@ -0,0 +1,40 @@ +package org.opsli.modulars.tools.email.wrapper; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.opsli.common.annotation.validation.ValidationArgs; +import org.opsli.common.annotation.validation.ValidationArgsLenMax; +import org.opsli.common.enums.ValiArgsType; + +/** + * @BelongsProject: opsli-boot + * @BelongsPackage: org.opsli.modulars.test.entity + * @Author: Parker + * @CreateTime: 2020-09-16 17:33 + * @Description: 租户表 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class EmailModel { + + + /** 收件人 */ + @ApiModelProperty(value = "收件人") + @ValidationArgs({ValiArgsType.IS_NOT_NULL}) + @ValidationArgsLenMax(200) + private String to; + + /** 主题 */ + @ApiModelProperty(value = "主题") + @ValidationArgs({ValiArgsType.IS_NOT_NULL}) + @ValidationArgsLenMax(200) + private String subject; + + /** 内容 */ + @ApiModelProperty(value = "内容") + @ValidationArgsLenMax(20000) + private String content; + + +} \ No newline at end of file