mirror of
https://gitee.com/dromara/sms4j.git
synced 2025-12-07 01:18:33 +08:00
update 简化 MailService 代码
This commit is contained in:
parent
6262058509
commit
4e540aead6
@ -2,453 +2,13 @@ package org.dromara.email.api;
|
|||||||
|
|
||||||
import org.dromara.email.comm.entity.MailMessage;
|
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 {
|
public interface MailClient {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sendMail
|
* 发送邮件,可以通过对象构造群体发送或者单体发送,取决于添加进去的收件人,同时可以添加
|
||||||
* <p> 发送纯文本邮件
|
|
||||||
* @param mailAddress 收件人地址
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件正文
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendMail(String mailAddress, String title ,String body);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendMail
|
|
||||||
* <p> 群体发送纯文本邮件
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件正文
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendMail(List<String> mailAddress ,String title ,String body);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendEmail
|
|
||||||
* <p>发送带有附件的文本邮件
|
|
||||||
* @param mailAddress 收件人地址
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件正文
|
|
||||||
* @param files 附件,可添加多个
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendEmail(String mailAddress, String title, String body,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendEmail
|
|
||||||
* <p>发送带有附件的文本邮件
|
|
||||||
* @param mailAddress 收件人地址 多个收件人地址请按英文','字符隔开
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件正文
|
|
||||||
* @param zipName 压缩包名称 比如 附件.zip
|
|
||||||
* @param files 附件,可添加多个
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendEmail(String mailAddress, String title, String body, String zipName, Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendEmail
|
|
||||||
* <p>群体发送带有附件的文本邮件
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件正文
|
|
||||||
* @param files 附件,可添加多个
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendEmail(List<String> mailAddress, String title, String body, Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendEmail
|
|
||||||
* <p>单人发送带有附件的文本邮件,同时可以携带密送人和抄送人
|
|
||||||
* <p>需要注意的是,密送人和抄送人也不能存在于黑名单内,否则也会被过滤
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件正文
|
|
||||||
* @param files 附件,可添加多个
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendEmail(String mailAddress, String title, String body,List<String> cc,List<String> bcc,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendEmail
|
|
||||||
* <p>群体发送带有附件的文本邮件,同时可以携带密送人和抄送人
|
|
||||||
* <p>需要注意的是,密送人和抄送人也不能存在于黑名单内,否则也会被过滤
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件正文
|
|
||||||
* @param files 附件,可添加多个
|
|
||||||
* @param bcc 密送人
|
|
||||||
* @param cc 抄送人
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendEmail(List<String> mailAddress, String title, String body,List<String> cc,List<String> bcc,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendEmail
|
|
||||||
* <p> 发送邮件,可以通过对象构造群体发送或者单体发送,取决于添加进去的收件人,同时可以添加
|
|
||||||
* 密送人,抄送人,附件等参数
|
* 密送人,抄送人,附件等参数
|
||||||
* @param mailMessage 发送邮件参数对象
|
* @param mailMessage 发送邮件参数对象
|
||||||
* @author :Wind
|
* @author :Wind
|
||||||
*/
|
*/
|
||||||
void sendEmail(MailMessage mailMessage);
|
void send(MailMessage mailMessage);
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文
|
|
||||||
* <p> 将默认读取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<String,String> parameter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param htmlName 邮件正文
|
|
||||||
* @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title , String htmlName, Map<String,String> parameter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
|
|
||||||
* @param mailAddress 收件人地址
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param htmlName 邮件模板名称
|
|
||||||
* @param parameter 实体
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(String mailAddress, String title , String htmlName, Parameter parameter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param htmlName 邮件模板名称
|
|
||||||
* @param parameter 实体
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title , String htmlName, Parameter parameter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文,带附件
|
|
||||||
* <p> 将默认读取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<String,String> parameter,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文,带附件
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param htmlName 邮件模板名称
|
|
||||||
* @param parameter 实体
|
|
||||||
* @param files 附件,可添加多个
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title , String htmlName,Map<String,String> parameter,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文,带附件
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,无正文,带附件
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第三个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param htmlName 邮件模板名称
|
|
||||||
* @param parameter 实体
|
|
||||||
* @param files 附件,可添加多个
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title , String htmlName,Parameter parameter,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文
|
|
||||||
* <p> 将默认读取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<String,String> parameter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件文本正文
|
|
||||||
* @param htmlName 邮件正文
|
|
||||||
* @param parameter key为模板的变量名称 无需携带大括号 value为模板变量所对应的值
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title ,String body, String htmlName, Map<String,String> parameter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件文本正文
|
|
||||||
* @param htmlName 邮件正文
|
|
||||||
* @param parameter 实体
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title ,String body, String htmlName, Parameter parameter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 将默认读取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<String,String> parameter,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 将默认读取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<String,String> parameter, String zipName, Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 将默认读取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<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 将默认读取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<String> mailAddress, String title ,String body, String htmlName, Map<String,String> parameter,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 将默认读取resources/template下的html文件,第四个参数为html的名称,需携带尾缀
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件文本正文
|
|
||||||
* @param htmlName 邮件正文
|
|
||||||
* @param parameter 字段名称为变量名称,字段值为变量值
|
|
||||||
* @param files 附件,可添加多个 key 为文件名,value为文件的路径
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title ,String body, String htmlName, Parameter parameter,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 从用户给定的输入流获取html模板文件
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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<String> mailAddress, String title , String body, InputStream html, Map<String, String> parameter, Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 从用户给定的输入流获取html模板文件
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现Parameter接口,编写get和set方法,这样一来字段的名称则为模板变量名称,对象的值则为模板变量的值
|
|
||||||
* @param mailAddress 收件人地址,添加多个
|
|
||||||
* @param title 邮件标题
|
|
||||||
* @param body 邮件文本正文
|
|
||||||
* @param html html模板的输入流,这个流可以来自任何来源,例如网络请求,或是本地文件,或者对象存储等
|
|
||||||
* @param parameter 字段名称为变量名称,字段值为变量值
|
|
||||||
* @param files 附件,可添加多个 key 为文件名,value为文件的路径
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(List<String> mailAddress, String title ,String body, InputStream html, Parameter parameter,Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 从用户给定的输入流获取html模板文件
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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<String> mailAddress, String title,String body,InputStream html,List<String> cc,List<String> bcc,Map<String, String> parameter, Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 从用户给定的输入流获取html模板文件
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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<String> mailAddress, String title,String body,InputStream html,List<String> cc,List<String> bcc,Parameter parameter, Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 从用户给定的输入流获取html模板文件
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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<String> mailAddress, String title,String body,String html,List<String> cc,List<String> bcc,Map<String, String> parameter, Map<String,String> files);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 读取模板发送html邮件,并携带正文和附件
|
|
||||||
* <p> 从用户给定的输入流获取html模板文件
|
|
||||||
* <p> 用户可以自己编写一个实体类,并实现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<String> mailAddress, String title,String body,String html,List<String> cc,List<String> bcc,Parameter parameter, Map<String,String> files);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sendHtml
|
|
||||||
* <p> 发送邮件,可以通过对象构造群体发送或者单体发送,取决于添加进去的收件人,同时可以添加
|
|
||||||
* 密送人,抄送人,附件等参数
|
|
||||||
* @param mailMessage 发送邮件参数对象
|
|
||||||
* @author :Wind
|
|
||||||
*/
|
|
||||||
void sendHtml(MailMessage mailMessage);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package org.dromara.email.comm.entity;
|
package org.dromara.email.comm.entity;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -9,136 +10,58 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
@Builder
|
||||||
public class MailMessage {
|
public class MailMessage {
|
||||||
|
|
||||||
/** 收件人地址*/
|
/**
|
||||||
|
* 收件人地址
|
||||||
|
*/
|
||||||
private List<String> mailAddress;
|
private List<String> mailAddress;
|
||||||
|
|
||||||
/** 邮件主题*/
|
/**
|
||||||
|
* 邮件主题
|
||||||
|
*/
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
/** 文字正文*/
|
/**
|
||||||
|
* 文字正文
|
||||||
|
*/
|
||||||
private String body;
|
private String body;
|
||||||
|
|
||||||
/** html模板文件路径(resources目录下的路径)*/
|
/**
|
||||||
|
* html模板文件路径(resources目录下的路径)
|
||||||
|
*/
|
||||||
private String htmlPath;
|
private String htmlPath;
|
||||||
|
|
||||||
/** html模板文件的输入流,可来自任意可读取位置*/
|
/**
|
||||||
|
* html模板文件的输入流,可来自任意可读取位置
|
||||||
|
*/
|
||||||
private InputStream htmlInputStream;
|
private InputStream htmlInputStream;
|
||||||
|
|
||||||
/** html 模板参数*/
|
/**
|
||||||
|
* html 模板参数
|
||||||
|
*/
|
||||||
private Map<String, String> htmlValues;
|
private Map<String, String> htmlValues;
|
||||||
|
|
||||||
/** 抄送人*/
|
/**
|
||||||
|
* zip文件名称
|
||||||
|
*/
|
||||||
|
private String zipName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 抄送人
|
||||||
|
*/
|
||||||
private List<String> cc;
|
private List<String> cc;
|
||||||
|
|
||||||
/** 密送人*/
|
/**
|
||||||
|
* 密送人
|
||||||
|
*/
|
||||||
private List<String> bcc;
|
private List<String> bcc;
|
||||||
|
|
||||||
/** 附件*/
|
/**
|
||||||
|
* 附件
|
||||||
|
*/
|
||||||
private Map<String, String> files;
|
private Map<String, String> 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<String> 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<String> 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<String> 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<String, String> 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<String,String> htmlValues){
|
|
||||||
if (mailMessage.files == null){
|
|
||||||
mailMessage.files = new HashMap<>();
|
|
||||||
}
|
|
||||||
mailMessage.htmlValues.putAll(htmlValues);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,10 +72,10 @@ public class MailBuild {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static MailClient build(MailSmtpConfig config) throws MessagingException {
|
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 {
|
public static MailClient build(MailSmtpConfig config,Blacklist blacklist)throws MessagingException {
|
||||||
return MailService.NewMailService(new MailBuild(config,blacklist));
|
return MailService.instance(new MailBuild(config,blacklist));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package org.dromara.email.core.service;
|
package org.dromara.email.core.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
import cn.hutool.core.lang.UUID;
|
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.core.util.StrUtil;
|
||||||
import cn.hutool.http.HttpUtil;
|
import cn.hutool.http.HttpUtil;
|
||||||
import org.dromara.email.api.MailClient;
|
import org.dromara.email.api.MailClient;
|
||||||
import org.dromara.email.api.Parameter;
|
|
||||||
import org.dromara.email.comm.constants.FileConstants;
|
import org.dromara.email.comm.constants.FileConstants;
|
||||||
import org.dromara.email.comm.entity.MailMessage;
|
import org.dromara.email.comm.entity.MailMessage;
|
||||||
import org.dromara.email.comm.errors.MailException;
|
import org.dromara.email.comm.errors.MailException;
|
||||||
import org.dromara.email.comm.utils.HtmlUtil;
|
import org.dromara.email.comm.utils.HtmlUtil;
|
||||||
import org.dromara.email.comm.utils.ZipUtils;
|
import org.dromara.email.comm.utils.ZipUtils;
|
||||||
import org.dromara.email.core.ReflectUtil;
|
|
||||||
|
|
||||||
import javax.activation.DataHandler;
|
import javax.activation.DataHandler;
|
||||||
import javax.activation.DataSource;
|
import javax.activation.DataSource;
|
||||||
@ -28,8 +27,6 @@ import javax.mail.util.ByteArrayDataSource;
|
|||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -44,212 +41,29 @@ public class MailService implements MailClient {
|
|||||||
this.mailBuild = mailBuild;
|
this.mailBuild = mailBuild;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MailClient NewMailService(MailBuild mailBuild) {
|
public static MailClient instance(MailBuild mailBuild) {
|
||||||
return new MailService(mailBuild);
|
return new MailService(mailBuild);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMail(String mailAddress, String title, String body) {
|
public void send(MailMessage mailMessage) {
|
||||||
sendEmail(mailAddress, title, body, null);
|
List<String> html;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendMail(List<String> mailAddress, String title, String body) {
|
|
||||||
sendEmail(mailAddress, title, body, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendEmail(String mailAddress, String title, String body, Map<String, String> files) {
|
|
||||||
sendEmail(Collections.singletonList(mailAddress), title, body, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendEmail(List<String> mailAddress, String title, String body, Map<String, String> files) {
|
|
||||||
sendEmail(mailAddress, title, body, null, null, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendEmail(String mailAddress, String title, String body, List<String> cc, List<String> bcc, Map<String, String> files) {
|
|
||||||
sendEmail(Collections.singletonList(mailAddress), title, body, cc, bcc, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendEmail(MailMessage mailMessage) {
|
|
||||||
sendEmail(mailMessage.getMailAddress(),
|
|
||||||
mailMessage.getTitle(),
|
|
||||||
mailMessage.getBody(),
|
|
||||||
mailMessage.getCc(),
|
|
||||||
mailMessage.getBcc(),
|
|
||||||
mailMessage.getFiles());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(String mailAddress, String title, String htmlName, Map<String, String> parameter) {
|
|
||||||
sendHtml(Collections.singletonList(mailAddress), title, htmlName, parameter);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String htmlName, Map<String, String> 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<String> 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<String, String> parameter, Map<String, String> files) {
|
|
||||||
sendHtml(mailAddress, title, "", htmlName, parameter, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String htmlName, Map<String, String> parameter, Map<String, String> files) {
|
|
||||||
sendHtml(mailAddress, title, "", htmlName, parameter, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(String mailAddress, String title, String htmlName, Parameter parameter, Map<String, String> files) {
|
|
||||||
sendHtml(mailAddress, title, htmlName, ReflectUtil.getValues(parameter), files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String htmlName, Parameter parameter, Map<String, String> files) {
|
|
||||||
sendHtml(mailAddress, title, htmlName, ReflectUtil.getValues(parameter), files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(String mailAddress, String title, String body, String htmlName, Map<String, String> parameter) {
|
|
||||||
sendHtml(mailAddress, title, body, htmlName, parameter, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String body, String htmlName, Map<String, String> 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<String> 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<String, String> parameter, Map<String, String> 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<String, String> files) {
|
|
||||||
sendHtml(mailAddress, title, body, htmlName, ReflectUtil.getValues(parameter), zipName, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String body, String htmlName, Map<String, String> parameter, Map<String, String> 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<String, String> files) {
|
|
||||||
sendHtml(Collections.singletonList(mailAddress), title, body, htmlName, parameter, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String body, String htmlName, Parameter parameter, Map<String, String> files) {
|
|
||||||
sendHtml(mailAddress, title, body, htmlName, ReflectUtil.getValues(parameter), files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String body, InputStream html, Map<String, String> parameter, Map<String, String> files) {
|
|
||||||
send(mailAddress, title, body, HtmlUtil.readHtml(html), parameter, files, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress, String title, String body, InputStream html, Parameter parameter, Map<String, String> files) {
|
|
||||||
sendHtml(mailAddress, title, body, html, ReflectUtil.getValues(parameter), files);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress,
|
|
||||||
String title,
|
|
||||||
String body,
|
|
||||||
InputStream html,
|
|
||||||
List<String> cc,
|
|
||||||
List<String> bcc,
|
|
||||||
Map<String, String> parameter,
|
|
||||||
Map<String, String> files) {
|
|
||||||
send(mailAddress, title, body, HtmlUtil.readHtml(html), parameter, files, cc, bcc);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress,
|
|
||||||
String title,
|
|
||||||
String body,
|
|
||||||
InputStream html,
|
|
||||||
List<String> cc,
|
|
||||||
List<String> bcc,
|
|
||||||
Parameter parameter,
|
|
||||||
Map<String, String> files) {
|
|
||||||
send(mailAddress, title, body, HtmlUtil.readHtml(html), ReflectUtil.getValues(parameter), files, cc, bcc);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress,
|
|
||||||
String title,
|
|
||||||
String body,
|
|
||||||
String html,
|
|
||||||
List<String> cc,
|
|
||||||
List<String> bcc,
|
|
||||||
Map<String, String> parameter,
|
|
||||||
Map<String, String> files) {
|
|
||||||
send(mailAddress, title, body, HtmlUtil.readHtml(html), parameter, files, cc, bcc);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(List<String> mailAddress,
|
|
||||||
String title,
|
|
||||||
String body,
|
|
||||||
String html,
|
|
||||||
List<String> cc,
|
|
||||||
List<String> bcc,
|
|
||||||
Parameter parameter,
|
|
||||||
Map<String, String> files) {
|
|
||||||
send(mailAddress, title, body, HtmlUtil.readHtml(html), ReflectUtil.getValues(parameter), files, cc, bcc);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendHtml(MailMessage mailMessage) {
|
|
||||||
if (mailMessage.getHtmlInputStream() == null) {
|
if (mailMessage.getHtmlInputStream() == null) {
|
||||||
sendHtml(mailMessage.getMailAddress(),
|
html = HtmlUtil.readHtml(mailMessage.getHtmlPath());
|
||||||
mailMessage.getTitle(),
|
|
||||||
mailMessage.getBody(),
|
|
||||||
mailMessage.getHtmlPath(),
|
|
||||||
mailMessage.getCc(),
|
|
||||||
mailMessage.getBcc(),
|
|
||||||
mailMessage.getHtmlValues(),
|
|
||||||
mailMessage.getFiles()
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
sendHtml(mailMessage.getMailAddress(),
|
html = HtmlUtil.readHtml(mailMessage.getHtmlInputStream());
|
||||||
|
}
|
||||||
|
send(mailMessage.getMailAddress(),
|
||||||
mailMessage.getTitle(),
|
mailMessage.getTitle(),
|
||||||
mailMessage.getBody(),
|
mailMessage.getBody(),
|
||||||
mailMessage.getHtmlInputStream(),
|
html,
|
||||||
mailMessage.getCc(),
|
|
||||||
mailMessage.getBcc(),
|
|
||||||
mailMessage.getHtmlValues(),
|
mailMessage.getHtmlValues(),
|
||||||
mailMessage.getFiles()
|
mailMessage.getZipName(),
|
||||||
|
mailMessage.getFiles(),
|
||||||
|
mailMessage.getCc(),
|
||||||
|
mailMessage.getBcc()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void forFiles(Multipart multipart, Map<String, String> files) throws MessagingException {
|
private void forFiles(Multipart multipart, Map<String, String> files) throws MessagingException {
|
||||||
for (Map.Entry<String, String> entry : files.entrySet()) {
|
for (Map.Entry<String, String> entry : files.entrySet()) {
|
||||||
@ -287,72 +101,18 @@ public class MailService implements MailClient {
|
|||||||
String body,
|
String body,
|
||||||
List<String> html,
|
List<String> html,
|
||||||
Map<String, String> parameter,
|
Map<String, String> parameter,
|
||||||
|
String zipName,
|
||||||
Map<String, String> files,
|
Map<String, String> files,
|
||||||
List<String> cc,
|
List<String> cc,
|
||||||
List<String> bcc) {
|
List<String> bcc) {
|
||||||
try {
|
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);
|
Transport.send(message);
|
||||||
logger.info("邮件发送成功!^_^");
|
logger.info("邮件发送成功!^_^");
|
||||||
} catch (MessagingException e) {
|
} catch (MessagingException | IOException e) {
|
||||||
// 防止 maxRetries 数值小于0带来的其他问题
|
// 防止 maxRetries 数值小于0带来的其他问题
|
||||||
if (mailBuild.getMaxRetries() > 0) {
|
if (mailBuild.getMaxRetries() > 0) {
|
||||||
ReSendList(mailAddress,
|
ReSendList(mailAddress, title, body, html, parameter, zipName, files, cc, bcc);
|
||||||
title,
|
|
||||||
body,
|
|
||||||
html,
|
|
||||||
parameter,
|
|
||||||
files,
|
|
||||||
cc,
|
|
||||||
bcc);
|
|
||||||
} else {
|
|
||||||
logger.warning(e.getMessage());
|
|
||||||
throw new MailException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendEmail(List<String> mailAddress, String title, String body, List<String> cc, List<String> bcc, Map<String, String> 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<String, String> 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<String, String> parameter, String zipName, Map<String, String> 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);
|
|
||||||
} else {
|
} else {
|
||||||
logger.warning(e.getMessage());
|
logger.warning(e.getMessage());
|
||||||
throw new MailException(e);
|
throw new MailException(e);
|
||||||
@ -365,6 +125,7 @@ public class MailService implements MailClient {
|
|||||||
String body,
|
String body,
|
||||||
List<String> html,
|
List<String> html,
|
||||||
Map<String, String> parameter,
|
Map<String, String> parameter,
|
||||||
|
String zipName,
|
||||||
Map<String, String> files,
|
Map<String, String> files,
|
||||||
List<String> cc,
|
List<String> cc,
|
||||||
List<String> bcc) {
|
List<String> bcc) {
|
||||||
@ -377,13 +138,13 @@ public class MailService implements MailClient {
|
|||||||
logger.warning("邮件第 {" + retryCount + "} 次重新发送");
|
logger.warning("邮件第 {" + retryCount + "} 次重新发送");
|
||||||
Message message;
|
Message message;
|
||||||
if (html != null || parameter != null) {
|
if (html != null || parameter != null) {
|
||||||
message = messageBuild(mailAddress, title, body, html, parameter, files, cc, bcc);
|
message = messageBuild(mailAddress, title, body, html, parameter, zipName, cc, bcc, files);
|
||||||
} else {
|
} else {
|
||||||
message = messageBuild(mailAddress, title, body, cc, bcc, files);
|
message = messageBuild(mailAddress, title, body, null, null, zipName, cc, bcc, files);
|
||||||
}
|
}
|
||||||
Transport.send(message);
|
Transport.send(message);
|
||||||
retryOnFailure = false; // 发送成功,停止重试
|
retryOnFailure = false; // 发送成功,停止重试
|
||||||
} catch (MessagingException e) {
|
} catch (MessagingException | IOException e) {
|
||||||
retryCount++;
|
retryCount++;
|
||||||
try {
|
try {
|
||||||
// 间隔秒数
|
// 间隔秒数
|
||||||
@ -398,179 +159,41 @@ public class MailService implements MailClient {
|
|||||||
try {
|
try {
|
||||||
Message message;
|
Message message;
|
||||||
if (html != null || parameter != null) {
|
if (html != null || parameter != null) {
|
||||||
message = messageBuild(mailAddress, title, body, html, parameter, files, cc, bcc);
|
message = messageBuild(mailAddress, title, body, html, parameter, null, cc, bcc, files);
|
||||||
} else {
|
} else {
|
||||||
message = messageBuild(mailAddress, title, body, cc, bcc, files);
|
message = messageBuild(mailAddress, title, body, null, null, null, cc, bcc, files);
|
||||||
}
|
}
|
||||||
Transport.send(message);
|
Transport.send(message);
|
||||||
} catch (MessagingException e) {
|
} catch (MessagingException | IOException e) {
|
||||||
throw new MailException(e);
|
throw new MailException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReSendList(List<String> mailAddress,
|
|
||||||
String title,
|
|
||||||
String body,
|
|
||||||
List<String> cc,
|
|
||||||
List<String> bcc,
|
|
||||||
Map<String, String> files) {
|
|
||||||
ReSendList(mailAddress, title, body, null, null, files, cc, bcc);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ReSend(String mailAddress,
|
|
||||||
String title,
|
|
||||||
String body,
|
|
||||||
String htmlName,
|
|
||||||
Map<String, String> parameter,
|
|
||||||
String zipName,
|
|
||||||
Map<String, String> 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<String, String> files) {
|
|
||||||
ReSend(mailAddress, title, body, null, null, zipName, files);
|
|
||||||
}
|
|
||||||
|
|
||||||
// messageBuild 方法重载
|
|
||||||
private Message messageBuild(List<String> mailAddress,
|
|
||||||
String title,
|
|
||||||
String body,
|
|
||||||
List<String> html,
|
|
||||||
Map<String, String> parameter,
|
|
||||||
Map<String, String> files,
|
|
||||||
List<String> cc,
|
|
||||||
List<String> bcc) throws MessagingException {
|
|
||||||
Message message = mailBuild.getMessage();
|
|
||||||
message.setRecipients(Message.RecipientType.TO, mailBuild.eliminate(mailAddress));
|
|
||||||
message.setSubject(title);
|
|
||||||
|
|
||||||
Multipart multipart = new MimeMultipart("alternative");
|
|
||||||
// 读取模板并进行变量替换
|
|
||||||
List<String> 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<String> mailAddress,
|
public Message messageBuild(List<String> mailAddress,
|
||||||
String title,
|
String title,
|
||||||
String body,
|
String body,
|
||||||
|
List<String> html,
|
||||||
|
Map<String, String> parameter,
|
||||||
|
String zipName,
|
||||||
List<String> cc,
|
List<String> cc,
|
||||||
List<String> bcc,
|
List<String> bcc,
|
||||||
Map<String, String> files) throws MessagingException {
|
Map<String, String> files) throws MessagingException, IOException {
|
||||||
Message message = mailBuild.getMessage();
|
Message message = mailBuild.getMessage();
|
||||||
message.setRecipients(Message.RecipientType.TO, mailBuild.eliminate(mailAddress));
|
message.setRecipients(Message.RecipientType.TO, mailBuild.eliminate(mailAddress));
|
||||||
message.setSubject(title);
|
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<String, String> 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<String, String> parameter,
|
|
||||||
String zipName,
|
|
||||||
Map<String, String> 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");
|
Multipart multipart = new MimeMultipart("alternative");
|
||||||
|
if (CollUtil.isNotEmpty(html) && MapUtil.isNotEmpty(parameter)) {
|
||||||
//读取模板并进行变量替换
|
//读取模板并进行变量替换
|
||||||
List<String> strings = HtmlUtil.replacePlaceholder(HtmlUtil.readHtml(htmlName), parameter);
|
List<String> strings = HtmlUtil.replacePlaceholder(html, parameter);
|
||||||
//拼合HTML数据
|
//拼合HTML数据
|
||||||
String htmlData = HtmlUtil.pieceHtml(strings);
|
String htmlData = HtmlUtil.pieceHtml(strings);
|
||||||
|
MimeBodyPart htmlPart = new MimeBodyPart();
|
||||||
|
htmlPart.setContent(htmlData, "text/html;charset=UTF-8");
|
||||||
|
multipart.addBodyPart(htmlPart);
|
||||||
|
}
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(body)) {
|
if (StrUtil.isNotBlank(body)) {
|
||||||
// 创建文本正文部分
|
// 创建文本正文部分
|
||||||
MimeBodyPart textPart = new MimeBodyPart();
|
MimeBodyPart textPart = new MimeBodyPart();
|
||||||
@ -578,21 +201,26 @@ public class MailService implements MailClient {
|
|||||||
multipart.addBodyPart(textPart);
|
multipart.addBodyPart(textPart);
|
||||||
}
|
}
|
||||||
//添加附件
|
//添加附件
|
||||||
if (MapUtil.isNotEmpty(files)) {
|
if (MapUtil.isNotEmpty(files) && StrUtil.isNotBlank(zipName)) {
|
||||||
zipFiles(multipart, zipName, files);
|
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);
|
message.setContent(multipart);
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addCC(List<String> cc, List<String> bcc, Message message) throws MessagingException {
|
private void addCC(List<String> cc, List<String> bcc, Message message) throws MessagingException {
|
||||||
if (cc != null && cc.size() > 0) {
|
if (CollUtil.isNotEmpty(cc)) {
|
||||||
message.addRecipients(Message.RecipientType.CC, mailBuild.eliminate(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));
|
message.addRecipients(Message.RecipientType.BCC, mailBuild.eliminate(bcc));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user