feat:V3.1.1整合remi-comm到remi-cloud中
This commit is contained in:
57
remi-comm/remi-comm-email/pom.xml
Normal file
57
remi-comm/remi-comm-email/pom.xml
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>remi-comm-email</artifactId>
|
||||
<name>remi-comm-email</name>
|
||||
<description>remi-comm-email</description>
|
||||
|
||||
<parent>
|
||||
<groupId>ai.remi.top.cloud</groupId>
|
||||
<artifactId>remi-comm</artifactId>
|
||||
<version>3.1.1</version>
|
||||
</parent>
|
||||
|
||||
<!-- 打包上传到私服, 需要和配置文件中的server节点配合使用 -->
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>maven-releases</id>
|
||||
<name>release</name>
|
||||
<url>https://repository.njydsz.com/repository/maven-releases/</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>maven-snapshots</id>
|
||||
<name>snapshot</name>
|
||||
<url>https://repository.njydsz.com/repository/maven-snapshots/</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
|
||||
<dependencies>
|
||||
<!--common-core-->
|
||||
<dependency>
|
||||
<groupId>ai.remi.top.cloud</groupId>
|
||||
<artifactId>remi-comm-core</artifactId>
|
||||
</dependency>
|
||||
<!--springboot-mail整合包-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-mail</artifactId>
|
||||
</dependency>
|
||||
<!-- thymeleaf 模版 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
<!-- freemarker 模版 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-freemarker</artifactId>
|
||||
</dependency>
|
||||
<!--slf4j-->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
ai.remi.comm.email.service.EmailService
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user