feat:V3.1.1整合remi-comm到remi-cloud中

This commit is contained in:
dianjiu
2024-09-11 17:41:17 +08:00
parent e111c59a69
commit 28d62f6cf4
245 changed files with 20975 additions and 154 deletions

View File

@@ -0,0 +1,42 @@
package ai.remi.comm.email.config;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import javax.annotation.Resource;
import java.util.Properties;
/**
* @author dianjiu【公众号 点九开源】
* @email startdis@njydsz.com
* @desc MinioConfig
*/
@Configuration
@EnableConfigurationProperties(EmailProperties.class)
public class EmailConfig {
@Resource
private EmailProperties emailProperties;
/**
* 初始化 JavaMailSender
*/
@Bean
public JavaMailSenderImpl javaMailSenderImpl() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setProtocol(emailProperties.getProtocol());
javaMailSender.setHost(emailProperties.getSmtpHost());
javaMailSender.setPort(Integer.parseInt(emailProperties.getSmtpPort()));
javaMailSender.setDefaultEncoding(emailProperties.getEncoding());
javaMailSender.setUsername(emailProperties.getFromMail());
javaMailSender.setPassword(emailProperties.getPassword());
// TODO 设置邮件参数
Properties props = new Properties();
// props.setProperty("mail.smtp.auth", emailProperties.get());
javaMailSender.setJavaMailProperties(props);
return javaMailSender;
}
}

View File

@@ -0,0 +1,56 @@
package ai.remi.comm.email.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* @author dianjiu【公众号 点九开源】
* @email startdis@njydsz.com
* @desc Email配置类
*/
@Data
@Component
@ConfigurationProperties(prefix = "remi-comm.email")
public class EmailProperties {
/**
* 发送协议
*/
private String protocol;
/**
* 服务器地址
*/
private String smtpHost;
/**
* 服务器端口
*/
private String smtpPort;
/**
* 发件人名称
*/
private String fromName;
/**
* 发件人邮箱
*/
private String fromMail;
/**
* 发件人密码
*/
private String password;
/**
* 邮件编码
*/
private String encoding;
/**
* SSL配置
*/
@Data
@Configuration
@ConfigurationProperties("remi-comm.email.ssl")
class sslConf {
private String enabled;
private String sslPort;
}
}

View File

@@ -0,0 +1,57 @@
package ai.remi.comm.email.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Map;
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class Email {
/**
* 收件人,多个收件人用“,”隔开
*/
private String to;
/**
* 抄送人,多个抄送人用“,”隔开
*/
private String cc;
/**
* 密送人,多个密送人用“,”隔开
*/
private String bcc;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件内容
*/
private String content;
/**
* 图片资源路径
*/
private String rscPath;
/**
* 图片资源ID(CID)
*/
private String rscId;
/**
* 附件路径
*/
private String[] filePaths;
/**
* 邮件模板地址
*/
private String template;
/**
* 邮件模板变量
*/
private Map<String, Object> variable;
}

View File

@@ -0,0 +1,227 @@
package ai.remi.comm.email.service;
import ai.remi.comm.email.config.EmailProperties;
import ai.remi.comm.email.domain.Email;
import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Slf4j
@Component
public class EmailService {
/**
* 邮件配置
*/
@Resource
private EmailProperties emailProperties;
/**
* 邮件执行
*/
@Resource
private JavaMailSender mailSender;
/**
* thymeleaf
*/
@Resource
private TemplateEngine templateEngine;
/**
* freemarker
*/
@Resource
public Configuration configuration;
/**
* 发送文本邮件
*/
public void sendTextMail(Email email) {
SimpleMailMessage message = new SimpleMailMessage();
try {
message.setFrom(emailProperties.getFromName());
message.setTo(email.getTo());
message.setCc(email.getCc());
message.setBcc(email.getBcc());
message.setSubject(email.getSubject());
message.setText(email.getContent());
mailSender.send(message);
log.info("发送基础邮件成功!");
} catch (MailException e) {
log.error("发送基础邮件异常:" + e);
}
}
/**
* 发送html邮件
*/
public void sendHtmlMail(Email email) {
MimeMessage message = mailSender.createMimeMessage();
try {
//true表示需要创建一个multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(emailProperties.getFromName());
helper.setTo(email.getTo());
helper.setSubject(email.getSubject());
helper.setText(email.getContent(), true);
// 检查附件数组是否为空
String[] filePaths = email.getFilePaths();
if (checkFilePaths(filePaths)) {
for (String filePath : filePaths) {
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
}
}
mailSender.send(message);
log.info("发送html邮件成功");
} catch (MessagingException e) {
log.error("发送html邮件异常:" + e);
}
}
/**
* 发送正文是静态资源(图片)的邮件
*/
public void sendInlineMail(Email email) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(emailProperties.getFromName());
helper.setTo(email.getTo());
helper.setSubject(email.getSubject());
helper.setText(email.getContent(), true);
// 嵌入静态资源
FileSystemResource res = new FileSystemResource(new File(email.getRscPath()));
helper.addInline(email.getRscId(), res);
// 检查附件数组是否为空
String[] filePaths = email.getFilePaths();
if (checkFilePaths(filePaths)) {
for (String filePath : filePaths) {
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
}
}
mailSender.send(message);
log.info("发送嵌入图片的邮件成功!");
} catch (MessagingException e) {
log.error("发送嵌入图片的邮件异常:" + e);
}
}
/**
* 发送带附件的邮件
*/
public void sendAttachmentsMail(Email email) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(emailProperties.getFromName());
helper.setTo(email.getTo());
helper.setSubject(email.getSubject());
helper.setText(email.getContent(), true);
// 检查附件数组是否为空
String[] filePaths = email.getFilePaths();
if (checkFilePaths(filePaths)) {
for (String filePath : filePaths) {
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
}
}
mailSender.send(message);
log.info("发送带附件的邮件成功!");
} catch (MessagingException e) {
log.error("发送带附件的邮件异常:" + e);
}
}
public void sendThymeleafMail(Email email) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(emailProperties.getFromName());
helper.setTo(email.getTo());
helper.setSubject(email.getSubject());
helper.setText(email.getContent(), true);
// 设置邮件正文
Context context = new Context();
context.setVariables(email.getVariable());
String htmlContent = templateEngine.process(email.getTemplate(), context);
// 检查附件数组是否为空
String[] filePaths = email.getFilePaths();
if (checkFilePaths(filePaths)) {
for (String filePath : filePaths) {
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment("瑞米平台:" + fileName, file);
}
}
// 第二个参数设置为true表示HTML格式
helper.setText(htmlContent, true);
mailSender.send(message);
log.info("发送Thymeleaf模板邮件成功!");
} catch (MessagingException e) {
log.error("发送Thymeleaf模板邮件异常:" + e);
}
}
public void sendFreemarkerMail(Email email) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(emailProperties.getFromName());
helper.setTo(email.getTo());
helper.setSubject(email.getSubject());
helper.setText(email.getContent(), true);
// 设置邮件正文
Template template = configuration.getTemplate(email.getTemplate() + ".flt");
String htmlContent = FreeMarkerTemplateUtils.processTemplateIntoString(template, email.getVariable());
// 检查附件数组是否为空
String[] filePaths = email.getFilePaths();
if (checkFilePaths(filePaths)) {
for (String filePath : filePaths) {
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment("瑞米平台:" + fileName, file);
}
}
// 第二个参数设置为true表示HTML格式
helper.setText(htmlContent, true);
mailSender.send(message);
log.info("发送Freemarker模板邮件成功!");
} catch (Exception e) {
log.error("发送Freemarker模板邮件异常:" + e);
}
}
public static boolean checkFilePaths(String[] array) {
if (array == null) {
log.info("附件数组为null");
return false;
} else if (array.length == 0) {
log.info("附件数组为空");
return false;
} else {
log.info("附件数组不为空且不为null");
return true;
}
}
}

View File

@@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
ai.remi.comm.email.service.EmailService

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${title}</title>
</head>
<body>
<h1>${greeting}</h1>
<p>${message}</p>
</body>
</html>

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}">Welcome</title>
</head>
<body>
<h1 th:text="${greeting}">Hello,</h1>
<p th:text="${message}">Welcome to our site!</p>
</body>
</html>