From 4e540aead63a5d80c0d61acc57b734c40d0d40d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 2 Sep 2023 00:00:46 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E7=AE=80=E5=8C=96=20MailService=20?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/email/api/MailClient.java | 444 +--------------- .../email/comm/entity/MailMessage.java | 149 ++---- .../dromara/email/core/service/MailBuild.java | 4 +- .../email/core/service/MailService.java | 496 +++--------------- 4 files changed, 102 insertions(+), 991 deletions(-) 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 7b77947c..d8f4b834 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 @@ -2,453 +2,13 @@ package org.dromara.email.api; import org.dromara.email.comm.entity.MailMessage; -import java.io.InputStream; -import java.lang.String; -import java.util.List; -import java.util.Map; - public interface MailClient { /** - * 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,Map files); - - /** - * sendEmail - *

发送带有附件的文本邮件 - * @param mailAddress 收件人地址 多个收件人地址请按英文','字符隔开 - * @param title 邮件标题 - * @param body 邮件正文 - * @param zipName 压缩包名称 比如 附件.zip - * @param files 附件,可添加多个 - * @author :Wind - */ - void sendEmail(String mailAddress, String title, String body, String zipName, Map files); - - /** - * sendEmail - *

群体发送带有附件的文本邮件 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件正文 - * @param files 附件,可添加多个 - * @author :Wind - */ - void sendEmail(List mailAddress, String title, String body, Map files); - - /** - * sendEmail - *

单人发送带有附件的文本邮件,同时可以携带密送人和抄送人 - *

需要注意的是,密送人和抄送人也不能存在于黑名单内,否则也会被过滤 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件正文 - * @param files 附件,可添加多个 - * @author :Wind - */ - void sendEmail(String mailAddress, String title, String body,List cc,List bcc,Map files); - - /** - * sendEmail - *

群体发送带有附件的文本邮件,同时可以携带密送人和抄送人 - *

需要注意的是,密送人和抄送人也不能存在于黑名单内,否则也会被过滤 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件正文 - * @param files 附件,可添加多个 - * @param bcc 密送人 - * @param cc 抄送人 - * @author :Wind - */ - void sendEmail(List mailAddress, String title, String body,List cc,List bcc,Map files); - - /** - * sendEmail - *

发送邮件,可以通过对象构造群体发送或者单体发送,取决于添加进去的收件人,同时可以添加 - * 密送人,抄送人,附件等参数 - * @param mailMessage 发送邮件参数对象 - * @author :Wind - */ - void sendEmail(MailMessage mailMessage); - - /** - * 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的名称,需携带尾缀 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param htmlName 邮件正文 - * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值 - * @author :Wind - */ - void sendHtml(List 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的名称,需携带尾缀 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param htmlName 邮件模板名称 - * @param parameter 实体 - * @author :Wind - */ - void sendHtml(List 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,Map files); - - /** - * sendHtml - *

读取模板发送html邮件,无正文,带附件 - *

将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param htmlName 邮件模板名称 - * @param parameter 实体 - * @param files 附件,可添加多个 - * @author :Wind - */ - void sendHtml(List mailAddress, String title , String htmlName,Map parameter,Map 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,Map files); - - /** - * sendHtml - *

读取模板发送html邮件,无正文,带附件 - *

将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param htmlName 邮件模板名称 - * @param parameter 实体 - * @param files 附件,可添加多个 - * @author :Wind - */ - void sendHtml(List mailAddress, String title , String htmlName,Parameter parameter,Map 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的名称,需携带尾缀 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param htmlName 邮件正文 - * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值 - * @author :Wind - */ - void sendHtml(List 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的名称,需携带尾缀 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param htmlName 邮件正文 - * @param parameter 实体 - * @author :Wind - */ - void sendHtml(List 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 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :Wind - */ - void sendHtml(String mailAddress, String title ,String body, String htmlName, Map parameter,Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀 - * @param mailAddress 收件人地址 多个收件人地址请按英文','字符隔开 - * @param title 邮件标题 - * @param body 邮件文本正文 可为空 - * @param htmlName 邮件正文 - * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值 - * @param zipName 压缩包名称 比如 附件.zip - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :bleachtred - */ - void sendHtml(String mailAddress, String title, String body, String htmlName, Map parameter, String zipName, Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀 - * @param mailAddress 收件人地址 多个收件人地址请按英文','字符隔开 - * @param title 邮件标题 - * @param body 邮件文本正文 可为空 - * @param htmlName 邮件正文 - * @param parameter 字段名称为变量名称,字段值为变量值 - * @param zipName 压缩包名称 比如 附件.zip - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :Wind - */ - void sendHtml(String mailAddress, String title, String body, String htmlName, Parameter parameter, String zipName, Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param htmlName 邮件正文 - * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :Wind - */ - void sendHtml(List mailAddress, String title ,String body, String htmlName, Map parameter,Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param htmlName 邮件正文 - * @param parameter 字段名称为变量名称,字段值为变量值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :Wind - */ - void sendHtml(String mailAddress, String title ,String body, String htmlName, Parameter parameter,Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param htmlName 邮件正文 - * @param parameter 字段名称为变量名称,字段值为变量值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :Wind - */ - void sendHtml(List mailAddress, String title ,String body, String htmlName, Parameter parameter,Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

从用户给定的输入流获取html模板文件 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param html html模板的输入流,这个流可以来自任何来源,例如网络请求,或是本地文件,或者对象存储等 - * @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :Wind - */ - void sendHtml(List mailAddress, String title , String body, InputStream html, Map parameter, Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

从用户给定的输入流获取html模板文件 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param html html模板的输入流,这个流可以来自任何来源,例如网络请求,或是本地文件,或者对象存储等 - * @param parameter 字段名称为变量名称,字段值为变量值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @author :Wind - */ - void sendHtml(List mailAddress, String title ,String body, InputStream html, Parameter parameter,Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

从用户给定的输入流获取html模板文件 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param html html模板的输入流,这个流可以来自任何来源,例如网络请求,或是本地文件,或者对象存储等 - * @param parameter key为变量名称,value为变量值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @param cc 抄送人,可添加多个 - * @param bcc 密送人,可添加多个 - * @author :Wind - */ - void sendHtml(List mailAddress, String title,String body,InputStream html,List cc,List bcc,Map parameter, Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

从用户给定的输入流获取html模板文件 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param html html模板的输入流,这个流可以来自任何来源,例如网络请求,或是本地文件,或者对象存储等 - * @param parameter 字段名称为变量名称,字段值为变量值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @param cc 抄送人,可添加多个 - * @param bcc 密送人,可添加多个 - * @author :Wind - */ - void sendHtml(List mailAddress, String title,String body,InputStream html,List cc,List bcc,Parameter parameter, Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

从用户给定的输入流获取html模板文件 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param html html模板的名称 - * @param parameter 字段名称为变量名称,字段值为变量值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @param cc 抄送人,可添加多个 - * @param bcc 密送人,可添加多个 - * @author :Wind - */ - void sendHtml(List mailAddress, String title,String body,String html,List cc,List bcc,Map parameter, Map files); - - /** - * sendHtml - *

读取模板发送html邮件,并携带正文和附件 - *

从用户给定的输入流获取html模板文件 - *

用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值 - * @param mailAddress 收件人地址,添加多个 - * @param title 邮件标题 - * @param body 邮件文本正文 - * @param html html模板的名称 - * @param parameter 字段名称为变量名称,字段值为变量值 - * @param files 附件,可添加多个 key 为文件名,value为文件的路径 - * @param cc 抄送人,可添加多个 - * @param bcc 密送人,可添加多个 - * @author :Wind - */ - void sendHtml(List mailAddress, String title,String body,String html,List cc,List bcc,Parameter parameter, Map files); - - - /** - * sendHtml - *

发送邮件,可以通过对象构造群体发送或者单体发送,取决于添加进去的收件人,同时可以添加 + * 发送邮件,可以通过对象构造群体发送或者单体发送,取决于添加进去的收件人,同时可以添加 * 密送人,抄送人,附件等参数 * @param mailMessage 发送邮件参数对象 * @author :Wind */ - void sendHtml(MailMessage mailMessage); + void send(MailMessage mailMessage); } diff --git a/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/entity/MailMessage.java b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/entity/MailMessage.java index c068ffb7..59eff79b 100644 --- a/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/entity/MailMessage.java +++ b/sms4j-Email-plugin/sms4j-Email-comm/src/main/java/org/dromara/email/comm/entity/MailMessage.java @@ -1,5 +1,6 @@ package org.dromara.email.comm.entity; +import lombok.Builder; import lombok.Getter; import java.io.InputStream; @@ -9,136 +10,58 @@ import java.util.List; import java.util.Map; @Getter +@Builder public class MailMessage { - /** 收件人地址*/ + /** + * 收件人地址 + */ private List mailAddress; - /** 邮件主题*/ + /** + * 邮件主题 + */ private String title; - /** 文字正文*/ + /** + * 文字正文 + */ private String body; - /** html模板文件路径(resources目录下的路径)*/ + /** + * html模板文件路径(resources目录下的路径) + */ private String htmlPath; - /** html模板文件的输入流,可来自任意可读取位置*/ + /** + * html模板文件的输入流,可来自任意可读取位置 + */ private InputStream htmlInputStream; - /** html 模板参数*/ - private Map htmlValues; + /** + * html 模板参数 + */ + private Map htmlValues; - /** 抄送人*/ + /** + * zip文件名称 + */ + private String zipName; + + /** + * 抄送人 + */ private List cc; - /** 密送人*/ + /** + * 密送人 + */ private List bcc; - /** 附件*/ - private Map files; + /** + * 附件 + */ + private Map files; - public static MailsBuilder Builder(){ - return new MailsBuilder(); - } - static class MailsBuilder{ - private final MailMessage mailMessage = new MailMessage(); - public MailsBuilder() { - } - public MailMessage build(){ - return mailMessage; - } - - public MailsBuilder setMailAddress(List mailAddress) { - mailMessage.mailAddress = mailAddress; - return this; - } - - public MailsBuilder setMailAddress(String mailAddress){ - if ( mailMessage.mailAddress == null){ - mailMessage.mailAddress = new ArrayList<>(); - } - mailMessage.mailAddress.add(mailAddress); - return this; - } - - public MailsBuilder setTitle(String title){ - mailMessage.title = title; - return this; - } - - public MailsBuilder setBody(String body){ - mailMessage.body = body; - return this; - } - - public MailsBuilder setCc(List cc){ - mailMessage.cc = cc; - return this; - } - - public MailsBuilder setCc(String cc){ - if (mailMessage.cc == null){ - mailMessage.cc = new ArrayList<>(); - } - mailMessage.cc.add(cc); - return this; - } - - public MailsBuilder setBcc(List bcc){ - mailMessage.bcc = bcc; - return this; - } - - public MailsBuilder setBcc(String bcc){ - if (mailMessage.bcc == null){ - mailMessage.bcc = new ArrayList<>(); - } - mailMessage.bcc.add(bcc); - return this; - } - - public MailsBuilder setFiles(Map files){ - if (mailMessage.files == null){ - mailMessage.files = new HashMap<>(); - } - mailMessage.files.putAll(files); - return this; - } - - public MailsBuilder setFiles(String fileName,String filePath){ - if (mailMessage.files == null){ - mailMessage.files = new HashMap<>(); - } - mailMessage.files.put(fileName,filePath); - return this; - } - - public MailsBuilder setHtmlPath(String htmlPath){ - mailMessage.htmlPath = htmlPath; - return this; - } - - public MailsBuilder setHtmlInputStream(InputStream htmlInputStream){ - mailMessage.htmlInputStream = htmlInputStream; - return this; - } - - public MailsBuilder setHtmlValues(String key, String value){ - if (mailMessage.files == null){ - mailMessage.files = new HashMap<>(); - } - mailMessage.htmlValues.put(key,value); - return this; - } - - public MailsBuilder setHtmlValues(Map htmlValues){ - if (mailMessage.files == null){ - mailMessage.files = new HashMap<>(); - } - mailMessage.htmlValues.putAll(htmlValues); - return this; - } - } } diff --git a/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailBuild.java b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailBuild.java index 23450063..c922530b 100644 --- a/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailBuild.java +++ b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailBuild.java @@ -72,10 +72,10 @@ public class MailBuild { } public static MailClient build(MailSmtpConfig config) throws MessagingException { - return MailService.NewMailService(new MailBuild(config)); + return MailService.instance(new MailBuild(config)); } public static MailClient build(MailSmtpConfig config,Blacklist blacklist)throws MessagingException { - return MailService.NewMailService(new MailBuild(config,blacklist)); + return MailService.instance(new MailBuild(config,blacklist)); } /** diff --git a/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailService.java b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailService.java index 95f593a2..6c00d4e2 100644 --- a/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailService.java +++ b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MailService.java @@ -1,5 +1,6 @@ package org.dromara.email.core.service; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.UUID; @@ -7,13 +8,11 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import org.dromara.email.api.MailClient; -import org.dromara.email.api.Parameter; import org.dromara.email.comm.constants.FileConstants; import org.dromara.email.comm.entity.MailMessage; import org.dromara.email.comm.errors.MailException; import org.dromara.email.comm.utils.HtmlUtil; import org.dromara.email.comm.utils.ZipUtils; -import org.dromara.email.core.ReflectUtil; import javax.activation.DataHandler; import javax.activation.DataSource; @@ -28,8 +27,6 @@ import javax.mail.util.ByteArrayDataSource; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -44,211 +41,28 @@ public class MailService implements MailClient { this.mailBuild = mailBuild; } - public static MailClient NewMailService(MailBuild mailBuild) { + public static MailClient instance(MailBuild mailBuild) { return new MailService(mailBuild); } @Override - public void sendMail(String mailAddress, String title, String body) { - sendEmail(mailAddress, title, body, null); - } - - @Override - public void sendMail(List mailAddress, String title, String body) { - sendEmail(mailAddress, title, body, null); - } - - @Override - public void sendEmail(String mailAddress, String title, String body, Map files) { - sendEmail(Collections.singletonList(mailAddress), title, body, files); - } - - @Override - public void sendEmail(List mailAddress, String title, String body, Map files) { - sendEmail(mailAddress, title, body, null, null, files); - } - - @Override - public void sendEmail(String mailAddress, String title, String body, List cc, List bcc, Map files) { - sendEmail(Collections.singletonList(mailAddress), title, body, cc, bcc, files); - } - - @Override - public void sendEmail(MailMessage mailMessage) { - sendEmail(mailMessage.getMailAddress(), + public void send(MailMessage mailMessage) { + List html; + if (mailMessage.getHtmlInputStream() == null) { + html = HtmlUtil.readHtml(mailMessage.getHtmlPath()); + } else { + html = HtmlUtil.readHtml(mailMessage.getHtmlInputStream()); + } + send(mailMessage.getMailAddress(), mailMessage.getTitle(), mailMessage.getBody(), + html, + mailMessage.getHtmlValues(), + mailMessage.getZipName(), + mailMessage.getFiles(), mailMessage.getCc(), - mailMessage.getBcc(), - mailMessage.getFiles()); - } - - @Override - public void sendHtml(String mailAddress, String title, String htmlName, Map parameter) { - sendHtml(Collections.singletonList(mailAddress), title, htmlName, parameter); - } - - @Override - public void sendHtml(List mailAddress, String title, String htmlName, Map parameter) { - sendHtml(mailAddress, title, htmlName, parameter, null); - } - - @Override - public void sendHtml(String mailAddress, String title, String htmlName, Parameter parameter) { - sendHtml(Collections.singletonList(mailAddress), title, htmlName, parameter); - } - - @Override - public void sendHtml(List mailAddress, String title, String htmlName, Parameter parameter) { - sendHtml(mailAddress, title, htmlName, ReflectUtil.getValues(parameter)); - } - - @Override - public void sendHtml(String mailAddress, String title, String htmlName, Map parameter, Map files) { - sendHtml(mailAddress, title, "", htmlName, parameter, files); - } - - @Override - public void sendHtml(List mailAddress, String title, String htmlName, Map parameter, Map files) { - sendHtml(mailAddress, title, "", htmlName, parameter, files); - } - - @Override - public void sendHtml(String mailAddress, String title, String htmlName, Parameter parameter, Map files) { - sendHtml(mailAddress, title, htmlName, ReflectUtil.getValues(parameter), files); - } - - @Override - public void sendHtml(List mailAddress, String title, String htmlName, Parameter parameter, Map files) { - sendHtml(mailAddress, title, htmlName, ReflectUtil.getValues(parameter), files); - } - - @Override - public void sendHtml(String mailAddress, String title, String body, String htmlName, Map parameter) { - sendHtml(mailAddress, title, body, htmlName, parameter, null); - } - - @Override - public void sendHtml(List mailAddress, String title, String body, String htmlName, Map parameter) { - sendHtml(mailAddress, title, body, htmlName, parameter, null); - } - - @Override - public void sendHtml(String mailAddress, String title, String body, String htmlName, Parameter parameter) { - sendHtml(Collections.singletonList(mailAddress), title, body, htmlName, parameter); - } - - @Override - public void sendHtml(List mailAddress, String title, String body, String htmlName, Parameter parameter) { - sendHtml(mailAddress, title, body, htmlName, parameter, null); - } - - @Override - public void sendHtml(String mailAddress, String title, String body, String htmlName, Map parameter, Map files) { - sendHtml(Collections.singletonList(mailAddress), title, body, htmlName, parameter, files); - } - - @Override - public void sendHtml(String mailAddress, String title, String body, String htmlName, Parameter parameter, String zipName, Map files) { - sendHtml(mailAddress, title, body, htmlName, ReflectUtil.getValues(parameter), zipName, files); - } - - @Override - public void sendHtml(List mailAddress, String title, String body, String htmlName, Map parameter, Map files) { - send(mailAddress, title, body, HtmlUtil.readHtml(htmlName), parameter, files, null, null); - } - - @Override - public void sendHtml(String mailAddress, String title, String body, String htmlName, Parameter parameter, Map files) { - sendHtml(Collections.singletonList(mailAddress), title, body, htmlName, parameter, files); - } - - @Override - public void sendHtml(List mailAddress, String title, String body, String htmlName, Parameter parameter, Map files) { - sendHtml(mailAddress, title, body, htmlName, ReflectUtil.getValues(parameter), files); - } - - @Override - public void sendHtml(List mailAddress, String title, String body, InputStream html, Map parameter, Map files) { - send(mailAddress, title, body, HtmlUtil.readHtml(html), parameter, files, null, null); - } - - @Override - public void sendHtml(List mailAddress, String title, String body, InputStream html, Parameter parameter, Map files) { - sendHtml(mailAddress, title, body, html, ReflectUtil.getValues(parameter), files); - } - - @Override - public void sendHtml(List mailAddress, - String title, - String body, - InputStream html, - List cc, - List bcc, - Map parameter, - Map files) { - send(mailAddress, title, body, HtmlUtil.readHtml(html), parameter, files, cc, bcc); - } - - @Override - public void sendHtml(List mailAddress, - String title, - String body, - InputStream html, - List cc, - List bcc, - Parameter parameter, - Map files) { - send(mailAddress, title, body, HtmlUtil.readHtml(html), ReflectUtil.getValues(parameter), files, cc, bcc); - } - - @Override - public void sendHtml(List mailAddress, - String title, - String body, - String html, - List cc, - List bcc, - Map parameter, - Map files) { - send(mailAddress, title, body, HtmlUtil.readHtml(html), parameter, files, cc, bcc); - } - - @Override - public void sendHtml(List mailAddress, - String title, - String body, - String html, - List cc, - List bcc, - Parameter parameter, - Map files) { - send(mailAddress, title, body, HtmlUtil.readHtml(html), ReflectUtil.getValues(parameter), files, cc, bcc); - } - - @Override - public void sendHtml(MailMessage mailMessage) { - if (mailMessage.getHtmlInputStream() == null) { - sendHtml(mailMessage.getMailAddress(), - mailMessage.getTitle(), - mailMessage.getBody(), - mailMessage.getHtmlPath(), - mailMessage.getCc(), - mailMessage.getBcc(), - mailMessage.getHtmlValues(), - mailMessage.getFiles() - ); - } else { - sendHtml(mailMessage.getMailAddress(), - mailMessage.getTitle(), - mailMessage.getBody(), - mailMessage.getHtmlInputStream(), - mailMessage.getCc(), - mailMessage.getBcc(), - mailMessage.getHtmlValues(), - mailMessage.getFiles() - ); - } + mailMessage.getBcc() + ); } private void forFiles(Multipart multipart, Map files) throws MessagingException { @@ -261,7 +75,7 @@ public class MailService implements MailClient { if (v.startsWith("http")) { byte[] bytes = HttpUtil.downloadBytes(v); source = new ByteArrayDataSource(bytes, FileConstants.IO_FILE_TYPE); - }else { + } else { source = new FileDataSource(v); } messageBodyPart.setDataHandler(new DataHandler(source)); @@ -287,72 +101,18 @@ public class MailService implements MailClient { String body, List html, Map parameter, + String zipName, Map files, List cc, List bcc) { try { - Message message = messageBuild(mailAddress, title, body, html, parameter, files, cc, bcc); + Message message = messageBuild(mailAddress, title, body, html, parameter, zipName, cc, bcc, files); Transport.send(message); logger.info("邮件发送成功!^_^"); - } catch (MessagingException e) { + } catch (MessagingException | IOException e) { // 防止 maxRetries 数值小于0带来的其他问题 - if (mailBuild.getMaxRetries() > 0){ - ReSendList(mailAddress, - title, - body, - html, - parameter, - files, - cc, - bcc); - } else { - logger.warning(e.getMessage()); - throw new MailException(e); - } - } - } - - @Override - public void sendEmail(List mailAddress, String title, String body, List cc, List bcc, Map files) { - try { - Message message = messageBuild(mailAddress, title, body, cc, bcc, files); - Transport.send(message); - logger.info("邮件发送成功!^_^"); - } catch (MessagingException e) { if (mailBuild.getMaxRetries() > 0) { - ReSendList(mailAddress, title, body, cc, bcc, files); - } else { - logger.warning(e.getMessage()); - throw new MailException(e); - } - } - } - - @Override - public void sendEmail(String mailAddress, String title, String body, String zipName, Map files) { - try { - Message message = messageBuild(mailAddress, title, body, zipName, files); - Transport.send(message); - logger.info("邮件发送成功!^_^"); - } catch (MessagingException | IOException e) { - if (mailBuild.getMaxRetries() > 1) { - ReSend(mailAddress, title, body, zipName, files); - } else { - logger.warning(e.getMessage()); - throw new MailException(e); - } - } - } - - @Override - public void sendHtml(String mailAddress, String title, String body, String htmlName, Map parameter, String zipName, Map files) { - try { - Message message = messageBuild(mailAddress, title, body, htmlName, parameter, zipName, files); - Transport.send(message); - logger.info("邮件发送成功!^_^"); - } catch (MessagingException | IOException e) { - if (mailBuild.getMaxRetries() > 1) { - ReSend(mailAddress, title, body, htmlName, parameter, zipName, files); + ReSendList(mailAddress, title, body, html, parameter, zipName, files, cc, bcc); } else { logger.warning(e.getMessage()); throw new MailException(e); @@ -361,13 +121,14 @@ public class MailService implements MailClient { } private void ReSendList(List mailAddress, - String title, - String body, - List html, - Map parameter, - Map files, - List cc, - List bcc) { + String title, + String body, + List html, + Map parameter, + String zipName, + Map files, + List cc, + List bcc) { int maxRetries = mailBuild.getMaxRetries(); int retryCount = 1; // 初始值为1;则while循环中少发送一次,最后一次发送在判断 retryCount >= maxRetries 这里。 boolean retryOnFailure = true; @@ -376,14 +137,14 @@ public class MailService implements MailClient { try { logger.warning("邮件第 {" + retryCount + "} 次重新发送"); Message message; - if (html != null || parameter != null){ - message = messageBuild(mailAddress, title, body, html, parameter, files, cc, bcc); + if (html != null || parameter != null) { + message = messageBuild(mailAddress, title, body, html, parameter, zipName, cc, bcc, files); } else { - message = messageBuild(mailAddress, title, body, cc, bcc, files); + message = messageBuild(mailAddress, title, body, null, null, zipName, cc, bcc, files); } Transport.send(message); retryOnFailure = false; // 发送成功,停止重试 - } catch (MessagingException e) { + } catch (MessagingException | IOException e) { retryCount++; try { // 间隔秒数 @@ -397,180 +158,42 @@ public class MailService implements MailClient { if (retryCount >= maxRetries && retryOnFailure) { try { Message message; - if (html != null || parameter != null){ - message = messageBuild(mailAddress, title, body, html, parameter, files, cc, bcc); + if (html != null || parameter != null) { + message = messageBuild(mailAddress, title, body, html, parameter, null, cc, bcc, files); } else { - message = messageBuild(mailAddress, title, body, cc, bcc, files); + message = messageBuild(mailAddress, title, body, null, null, null, cc, bcc, files); } Transport.send(message); - } catch (MessagingException e) { + } catch (MessagingException | IOException e) { throw new MailException(e); } } } - public void ReSendList(List mailAddress, - String title, - String body, - List cc, - List bcc, - Map files) { - ReSendList(mailAddress, title, body, null, null, files, cc, bcc); - } - - private void ReSend(String mailAddress, - String title, - String body, - String htmlName, - Map parameter, - String zipName, - Map files) { - int maxRetries = mailBuild.getMaxRetries(); - int retryCount = 1; // 初始值为1;则while循环中少发送一次,最后一次发送在判断 retryCount >= maxRetries 这里。 - boolean retryOnFailure = true; - - while (retryOnFailure && retryCount < maxRetries) { - try { - logger.warning("邮件第 {" + retryCount + "} 次重新发送"); - if (htmlName != null || parameter != null){ - Message message = messageBuild(mailAddress, title, body, htmlName, parameter, zipName, files); - Transport.send(message); - } else { - Message message = messageBuild(mailAddress, title, body, zipName, files); - Transport.send(message); - } - retryOnFailure = false; // 发送成功,停止重试 - } catch (MessagingException e) { - retryCount++; - try { - // 间隔秒数 - TimeUnit.SECONDS.sleep(mailBuild.getRetryInterval()); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - if (retryCount >= maxRetries && retryOnFailure) { - try { - if (htmlName != null || parameter != null){ - Message message = messageBuild(mailAddress, title, body, htmlName, parameter, zipName, files); - Transport.send(message); - } else { - Message message = messageBuild(mailAddress, title, body, zipName, files); - Transport.send(message); - } - } catch (MessagingException e) { - throw new MailException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - private void ReSend(String mailAddress, - String title, - String body, - String zipName, - Map files) { - ReSend(mailAddress, title, body, null, null, zipName, files); - } - - // messageBuild 方法重载 - private Message messageBuild(List mailAddress, - String title, - String body, - List html, - Map parameter, - Map files, - List cc, - List bcc) throws MessagingException { - Message message = mailBuild.getMessage(); - message.setRecipients(Message.RecipientType.TO, mailBuild.eliminate(mailAddress)); - message.setSubject(title); - - Multipart multipart = new MimeMultipart("alternative"); - // 读取模板并进行变量替换 - List strings = HtmlUtil.replacePlaceholder(html, parameter); - // 拼合HTML数据 - String htmlData = HtmlUtil.pieceHtml(strings); - if (!body.isEmpty()) { - // 创建文本正文部分 - MimeBodyPart textPart = new MimeBodyPart(); - textPart.setText(body); - multipart.addBodyPart(textPart); - } - // 添加附件 - if (files != null && files.size() != 0) { - forFiles(multipart, files); - } - - MimeBodyPart htmlPart = new MimeBodyPart(); - htmlPart.setContent(htmlData, "text/html;charset=UTF-8"); - addCC(cc, bcc, message); - multipart.addBodyPart(htmlPart); - message.setContent(multipart); - return message; - } - public Message messageBuild(List mailAddress, String title, String body, + List html, + Map parameter, + String zipName, List cc, List bcc, - Map files) throws MessagingException { + Map files) throws MessagingException, IOException { Message message = mailBuild.getMessage(); message.setRecipients(Message.RecipientType.TO, mailBuild.eliminate(mailAddress)); message.setSubject(title); - if (StrUtil.isNotBlank(body)) { - message.setText(body); - } - if (files != null && files.size() != 0) { - Multipart multipart = new MimeMultipart(); - forFiles(multipart, files); - message.setContent(multipart); - } - addCC(cc, bcc, message); - return message; - } - - public Message messageBuild(String mailAddress, - String title, - String body, - String zipName, - Map files) throws MessagingException, IOException { - Message message = mailBuild.getMessage(); - message.setRecipients(Message.RecipientType.TO, mailBuild.eliminate(Convert.toList(String.class, mailAddress))); - message.setSubject(title); - if (StrUtil.isNotBlank(body)) { - message.setText(body); - } - if (files != null && files.size() != 0) { - Multipart multipart = new MimeMultipart(); - zipFiles(multipart, zipName, files); - message.setContent(multipart); - } - return message; - } - - public Message messageBuild(String mailAddress, - String title, - String body, - String htmlName, - Map parameter, - String zipName, - Map files) throws MessagingException, IOException { - Message message = mailBuild.getMessage(); - message.setRecipients(Message.RecipientType.TO, mailBuild.eliminate(Convert.toList(String.class, mailAddress))); - message.setSubject(title); Multipart multipart = new MimeMultipart("alternative"); - //读取模板并进行变量替换 - List strings = HtmlUtil.replacePlaceholder(HtmlUtil.readHtml(htmlName), parameter); - //拼合HTML数据 - String htmlData = HtmlUtil.pieceHtml(strings); + if (CollUtil.isNotEmpty(html) && MapUtil.isNotEmpty(parameter)) { + //读取模板并进行变量替换 + List strings = HtmlUtil.replacePlaceholder(html, parameter); + //拼合HTML数据 + String htmlData = HtmlUtil.pieceHtml(strings); + MimeBodyPart htmlPart = new MimeBodyPart(); + htmlPart.setContent(htmlData, "text/html;charset=UTF-8"); + multipart.addBodyPart(htmlPart); + } + if (StrUtil.isNotBlank(body)) { // 创建文本正文部分 MimeBodyPart textPart = new MimeBodyPart(); @@ -578,21 +201,26 @@ public class MailService implements MailClient { multipart.addBodyPart(textPart); } //添加附件 - if (MapUtil.isNotEmpty(files)) { + if (MapUtil.isNotEmpty(files) && StrUtil.isNotBlank(zipName)) { zipFiles(multipart, zipName, files); + } else { + if (MapUtil.isNotEmpty(files)) { + forFiles(multipart, files); + message.setContent(multipart); + } + } + if (CollUtil.isNotEmpty(cc) || CollUtil.isNotEmpty(bcc)) { + addCC(cc, bcc, message); } - MimeBodyPart htmlPart = new MimeBodyPart(); - htmlPart.setContent(htmlData, "text/html;charset=UTF-8"); - multipart.addBodyPart(htmlPart); message.setContent(multipart); return message; } private void addCC(List cc, List bcc, Message message) throws MessagingException { - if (cc != null && cc.size() > 0) { + if (CollUtil.isNotEmpty(cc)) { message.addRecipients(Message.RecipientType.CC, mailBuild.eliminate(cc)); } - if (bcc != null && bcc.size() > 0) { + if (CollUtil.isNotEmpty(bcc)) { message.addRecipients(Message.RecipientType.BCC, mailBuild.eliminate(bcc)); } }