diff --git a/pom.xml b/pom.xml
index 5ed9c24e..9b02b6bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,6 +63,7 @@
1.1.1
1.6.2
1.2.0
+ 1.2.2
@@ -180,6 +181,12 @@
${sunactivation.version}
+
+ jakarta.activation
+ jakarta.activation-api
+ ${jakarta.activation.version}
+
+
diff --git a/sms4j-Email-plugin/pom.xml b/sms4j-Email-plugin/pom.xml
index 00c9982e..7b76fae9 100644
--- a/sms4j-Email-plugin/pom.xml
+++ b/sms4j-Email-plugin/pom.xml
@@ -56,6 +56,17 @@
javax.activation
${sunactivation.version}
+
+
+ jakarta.activation
+ jakarta.activation-api
+ ${jakarta.activation.version}
+
+
+ cn.hutool
+ hutool-cron
+ ${hutool.version}
+
diff --git a/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/Blacklist.java b/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/Blacklist.java
new file mode 100644
index 00000000..ff883288
--- /dev/null
+++ b/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/Blacklist.java
@@ -0,0 +1,14 @@
+package org.dromara.email.api;
+
+import java.util.List;
+
+/**
+ * Blacklist
+ *
黑名单实现 实现此接口,发送邮件时将自动排除调黑名单中的收件人
+ * @author :Wind
+ * 2023/6/8 23:05
+ **/
+public interface Blacklist {
+
+ List getBlacklist();
+}
diff --git a/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/MailClient.java b/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/MailClient.java
index 8ea14077..5316ac93 100644
--- a/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/MailClient.java
+++ b/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/MailClient.java
@@ -1,8 +1,162 @@
package org.dromara.email.api;
+import java.lang.String;
+import java.util.List;
+import java.util.Map;
+
public interface MailClient {
- void sendMail(String mailAddress, String Title ,String body);
+ /**
+ * sendMail
+ * 发送纯文本邮件
+ * @param mailAddress 收件人地址
+ * @param title 邮件标题
+ * @param body 邮件正文
+ * @author :Wind
+ */
+ void sendMail(String mailAddress, String title ,String body);
+
+ /**
+ * sendMail
+ *
群体发送纯文本邮件
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param body 邮件正文
+ * @author :Wind
+ */
+ void sendMail(List mailAddress ,String title ,String body);
+
+ /**
+ * sendEmail
+ * 发送带有附件的文本邮件
+ * @param mailAddress 收件人地址
+ * @param title 邮件标题
+ * @param body 邮件正文
+ * @param files 附件,可添加多个
+ * @author :Wind
+ */
+ void sendEmail(String mailAddress, String title, String body, String... files);
+
+ /**
+ * sendEmail
+ *
群体发送带有附件的文本邮件
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param body 邮件正文
+ * @param files 附件,可添加多个
+ * @author :Wind
+ */
+ void sendEmail(List mailAddress, String title, String body, String... files);
+
+
+
+ /**
+ * sendHtml
+ * 读取模板发送html邮件,无正文
+ *
将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param htmlName 邮件正文
+ * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title , String htmlName, Map parameter);
+
+ /**
+ * sendHtml
+ * 读取模板发送html邮件,无正文
+ *
将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
+ *
用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param htmlName 邮件模板名称
+ * @param parameter 实体
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title , String htmlName, Parameter parameter);
+
+ /**
+ * sendHtml
+ *
读取模板发送html邮件,无正文,带附件
+ *
将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param htmlName 邮件模板名称
+ * @param parameter 实体
+ * @param files 附件,可添加多个
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title , String htmlName,Map parameter,String...files);
+
+ /**
+ * sendHtml
+ * 读取模板发送html邮件,无正文,带附件
+ *
将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
+ *
用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param htmlName 邮件模板名称
+ * @param parameter 实体
+ * @param files 附件,可添加多个
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title , String htmlName,Parameter parameter,String...files);
+
+ /**
+ * sendHtml
+ *
读取模板发送html邮件,并携带正文
+ *
将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param body 邮件文本正文
+ * @param htmlName 邮件正文
+ * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title ,String body, String htmlName, Map parameter);
+
+ /**
+ * sendHtml
+ * 读取模板发送html邮件,并携带正文
+ *
将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
+ *
用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param body 邮件文本正文
+ * @param htmlName 邮件正文
+ * @param parameter 实体
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title ,String body, String htmlName, Parameter parameter);
+
+ /**
+ * sendHtml
+ *
读取模板发送html邮件,并携带正文和附件
+ *
将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param body 邮件文本正文
+ * @param htmlName 邮件正文
+ * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值
+ * @param files 附件,可添加多个
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title ,String body, String htmlName, Map parameter,String...files);
+
+ /**
+ * sendHtml
+ * 读取模板发送html邮件,并携带正文和附件
+ *
将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
+ *
用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
+ * @param mailAddress 收件人地址,添加多个
+ * @param title 邮件标题
+ * @param body 邮件文本正文
+ * @param htmlName 邮件正文
+ * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值
+ * @param files 附件,可添加多个
+ * @author :Wind
+ */
+ void sendHtml(String mailAddress, String title ,String body, String htmlName, Parameter parameter,String...files);
+
- void sendHtml(String mailAddress, String Title ,String body);
}
diff --git a/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/Parameter.java b/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/Parameter.java
new file mode 100644
index 00000000..95727fcd
--- /dev/null
+++ b/sms4j-Email-plugin/sms4j-Email-api/src/main/java/org/dromara/email/api/Parameter.java
@@ -0,0 +1,11 @@
+package org.dromara.email.api;
+
+/**
+ * Parameter
+ *
空接口,用于标定用户自己的实体类型
+ * 用于发送html模板邮件时候 用户传递自己的实体序列化进行的类型标定
+ * @author :Wind
+ * 2023/6/8 19:36
+ **/
+public interface Parameter {
+}
diff --git a/sms4j-Email-plugin/sms4j-Email-comm/pom.xml b/sms4j-Email-plugin/sms4j-Email-comm/pom.xml
index 49d5cd7e..251fb658 100644
--- a/sms4j-Email-plugin/sms4j-Email-comm/pom.xml
+++ b/sms4j-Email-plugin/sms4j-Email-comm/pom.xml
@@ -18,7 +18,10 @@
-
+
+ cn.hutool
+ hutool-cron
+
diff --git a/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/config/MailSmtpConfig.java b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/config/MailSmtpConfig.java
index 49a399cf..8bc58211 100644
--- a/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/config/MailSmtpConfig.java
+++ b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/config/MailSmtpConfig.java
@@ -1,6 +1,9 @@
package org.dromara.email.comm.config;
-import lombok.Data;
+import lombok.Builder;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.ToString;
/**
* MailSmtpConfig
@@ -8,12 +11,20 @@ import lombok.Data;
* @author :Wind
* 2023/6/7 21:19
**/
-@Data
+@Builder
+@ToString
+@Getter
+@EqualsAndHashCode
public class MailSmtpConfig {
/**
* 端口号
* */
- private String host;
+ private String port;
+
+ /**
+ * 发件人地址
+ * */
+ private String fromAddress;
/**
* 服务器地址
@@ -29,4 +40,16 @@ public class MailSmtpConfig {
* 密码
* */
private String password;
+
+ /**
+ * 是否开启ssl 默认开启
+ * */
+ @Builder.Default
+ private String isSSL = "true";
+
+ /**
+ * 是否开启验证 默认开启
+ * */
+ @Builder.Default
+ private String isAuth = "true";
}
diff --git a/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/utils/BaseUtil.java b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/utils/BaseUtil.java
new file mode 100644
index 00000000..4c580ca6
--- /dev/null
+++ b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/utils/BaseUtil.java
@@ -0,0 +1,11 @@
+package org.dromara.email.comm.utils;
+
+import java.io.File;
+
+public class BaseUtil {
+
+public static String getPathName(String path) {
+ String[] split = path.split(File.separator);
+ return split[split.length-1];
+}
+}
diff --git a/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/utils/ReflectUtil.java b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/utils/ReflectUtil.java
new file mode 100644
index 00000000..cb29aedd
--- /dev/null
+++ b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/utils/ReflectUtil.java
@@ -0,0 +1,36 @@
+package org.dromara.email.comm.utils;
+
+import org.dromara.email.comm.errors.MailException;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Parameter;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ReflectUtil {
+
+ /**
+ * 反射获取接口对象的原类名
+ */
+ public static String getObjectName(Parameter parameter) {
+ return parameter.getClass().getTypeName();
+ }
+
+ /**
+ * 将对象的属性和属性值变为map
+ * */
+ public static Map getValues(Parameter parameter) {
+ try {
+ Map map = new HashMap<>();
+ Class> clazz = Class.forName(getObjectName(parameter));
+ Field[] declaredFields = clazz.getDeclaredFields();
+ for (Field declaredField : declaredFields) {
+ declaredField.setAccessible(true);
+ map.put(declaredField.getName(),declaredField.get(parameter));
+ }
+ return map;
+ } catch (Exception e) {
+ throw new MailException(e);
+ }
+ }
+}
diff --git a/sms4j-Email-plugin/sms4j-Email-core/pom.xml b/sms4j-Email-plugin/sms4j-Email-core/pom.xml
index 715173f9..4487d531 100644
--- a/sms4j-Email-plugin/sms4j-Email-core/pom.xml
+++ b/sms4j-Email-plugin/sms4j-Email-core/pom.xml
@@ -34,6 +34,11 @@
javax.activation
+
+ jakarta.activation
+ jakarta.activation-api
+
+
diff --git a/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/factory/ConfigFactory.java b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/factory/ConfigFactory.java
new file mode 100644
index 00000000..2eab4ff2
--- /dev/null
+++ b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/factory/ConfigFactory.java
@@ -0,0 +1,62 @@
+package org.dromara.email.core.factory;
+
+import org.dromara.email.api.Blacklist;
+import org.dromara.email.api.MailClient;
+import org.dromara.email.comm.config.MailSmtpConfig;
+import org.dromara.email.comm.errors.MailException;
+import org.dromara.email.core.service.MailBuild;
+
+import javax.mail.MessagingException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * ConfigFactory
+ * 配置工厂
+ * @author :Wind
+ * 2023/6/8 22:35
+ **/
+public class ConfigFactory{
+ private static final Map