mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
Merge branch 'v4-dev' of github.com:looly/hutool into v4-dev
This commit is contained in:
commit
ef6214a303
@ -1,8 +1,11 @@
|
|||||||
package cn.hutool.extra.mail;
|
package cn.hutool.extra.mail;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.activation.DataHandler;
|
import javax.activation.DataHandler;
|
||||||
import javax.activation.DataSource;
|
import javax.activation.DataSource;
|
||||||
@ -16,6 +19,7 @@ import javax.mail.Transport;
|
|||||||
import javax.mail.internet.MimeBodyPart;
|
import javax.mail.internet.MimeBodyPart;
|
||||||
import javax.mail.internet.MimeMessage;
|
import javax.mail.internet.MimeMessage;
|
||||||
import javax.mail.internet.MimeMultipart;
|
import javax.mail.internet.MimeMultipart;
|
||||||
|
import javax.mail.util.ByteArrayDataSource;
|
||||||
|
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
@ -46,6 +50,8 @@ public class Mail {
|
|||||||
private boolean isHtml;
|
private boolean isHtml;
|
||||||
/** 附件列表 */
|
/** 附件列表 */
|
||||||
private DataSource[] attachments;
|
private DataSource[] attachments;
|
||||||
|
/** 图片列表 */
|
||||||
|
private Map<String, InputStream> imageMap;
|
||||||
/** 是否使用全局会话,默认为false */
|
/** 是否使用全局会话,默认为false */
|
||||||
private boolean useGlobalSession = false;
|
private boolean useGlobalSession = false;
|
||||||
|
|
||||||
@ -211,6 +217,18 @@ public class Mail {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置图片,图片的键对应到邮件模板中的占位字符串
|
||||||
|
*
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
*/
|
||||||
|
public Mail setImageMap(Map<String, InputStream> imageMap) {
|
||||||
|
if (imageMap != null && imageMap.size() > 0) {
|
||||||
|
this.imageMap = imageMap;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置字符集编码
|
* 设置字符集编码
|
||||||
*
|
*
|
||||||
@ -329,6 +347,22 @@ public class Mail {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 图片
|
||||||
|
for (Map.Entry<String, InputStream> entry : imageMap.entrySet()) {
|
||||||
|
BodyPart messageBodyPart = new MimeBodyPart();
|
||||||
|
DataSource ds;
|
||||||
|
try {
|
||||||
|
ds = new ByteArrayDataSource(entry.getValue(), "image/jpeg");
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new MailException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
messageBodyPart.setDataHandler(new DataHandler(ds));
|
||||||
|
messageBodyPart.setHeader("Content-ID", String.format("<%s>", entry.getKey()));
|
||||||
|
// add it
|
||||||
|
mainPart.addBodyPart(messageBodyPart);
|
||||||
|
}
|
||||||
|
|
||||||
return mainPart;
|
return mainPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package cn.hutool.extra.mail;
|
package cn.hutool.extra.mail;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
@ -14,7 +16,6 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
* @since 3.1.2
|
* @since 3.1.2
|
||||||
*/
|
*/
|
||||||
public class MailUtil {
|
public class MailUtil {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用配置文件中设置的账户发送文本邮件,发送给单个或多个收件人<br>
|
* 使用配置文件中设置的账户发送文本邮件,发送给单个或多个收件人<br>
|
||||||
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
||||||
@ -125,7 +126,7 @@ public class MailUtil {
|
|||||||
* @since 4.0.3
|
* @since 4.0.3
|
||||||
*/
|
*/
|
||||||
public static void send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
|
public static void send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
|
||||||
send(GlobalMailAccount.INSTANCE.getAccount(), true, tos, ccs, bccs, subject, content, isHtml, files);
|
send(GlobalMailAccount.INSTANCE.getAccount(), true, tos, ccs, bccs, subject, content, null, isHtml, files);
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------------------- Custom MailAccount
|
//------------------------------------------------------------------------------------------------------------------------------- Custom MailAccount
|
||||||
@ -172,7 +173,150 @@ public class MailUtil {
|
|||||||
* @since 4.0.3
|
* @since 4.0.3
|
||||||
*/
|
*/
|
||||||
public static void send(MailAccount mailAccount, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
|
public static void send(MailAccount mailAccount, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
|
||||||
send(mailAccount, false, tos, ccs, bccs, subject, content, isHtml, files);
|
send(mailAccount, false, tos, ccs, bccs, subject, content, null, isHtml, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用配置文件中设置的账户发送HTML邮件,发送给单个或多个收件人<br>
|
||||||
|
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
||||||
|
*
|
||||||
|
* @param to 收件人
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param files 附件列表
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @since 3.2.0
|
||||||
|
*/
|
||||||
|
public static void sendHtml(String to, String subject, String content, Map<String, InputStream> imageMap, File... files) {
|
||||||
|
send(to, subject, content, imageMap, true, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用配置文件中设置的账户发送邮件,发送单个或多个收件人<br>
|
||||||
|
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
||||||
|
*
|
||||||
|
* @param to 收件人
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param isHtml 是否为HTML
|
||||||
|
* @param files 附件列表
|
||||||
|
*/
|
||||||
|
public static void send(String to, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
|
send(splitAddress(to), subject, content, imageMap, isHtml, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用配置文件中设置的账户发送邮件,发送单个或多个收件人<br>
|
||||||
|
* 多个收件人、抄送人、密送人可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
||||||
|
*
|
||||||
|
* @param to 收件人,可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
||||||
|
* @param cc 抄送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
||||||
|
* @param bcc 密送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param isHtml 是否为HTML
|
||||||
|
* @param files 附件列表
|
||||||
|
* @since 4.0.3
|
||||||
|
*/
|
||||||
|
public static void send(String to, String cc, String bcc, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
|
send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, imageMap, isHtml, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用配置文件中设置的账户发送HTML邮件,发送给多人
|
||||||
|
*
|
||||||
|
* @param tos 收件人列表
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param files 附件列表
|
||||||
|
* @since 3.2.0
|
||||||
|
*/
|
||||||
|
public static void sendHtml(Collection<String> tos, String subject, String content, Map<String, InputStream> imageMap, File... files) {
|
||||||
|
send(tos, subject, content, imageMap, true, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用配置文件中设置的账户发送邮件,发送给多人
|
||||||
|
*
|
||||||
|
* @param tos 收件人列表
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param isHtml 是否为HTML
|
||||||
|
* @param files 附件列表
|
||||||
|
*/
|
||||||
|
public static void send(Collection<String> tos, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
|
send(tos, null, null, subject, content, imageMap, isHtml, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用配置文件中设置的账户发送邮件,发送给多人
|
||||||
|
*
|
||||||
|
* @param tos 收件人列表
|
||||||
|
* @param ccs 抄送人列表,可以为null或空
|
||||||
|
* @param bccs 密送人列表,可以为null或空
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param isHtml 是否为HTML
|
||||||
|
* @param files 附件列表
|
||||||
|
* @since 4.0.3
|
||||||
|
*/
|
||||||
|
public static void send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
|
send(GlobalMailAccount.INSTANCE.getAccount(), true, tos, ccs, bccs, subject, content, imageMap, isHtml, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------------------- Custom MailAccount
|
||||||
|
/**
|
||||||
|
* 发送邮件给多人
|
||||||
|
*
|
||||||
|
* @param mailAccount 邮件认证对象
|
||||||
|
* @param to 收件人,多个收件人逗号或者分号隔开
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param isHtml 是否为HTML格式
|
||||||
|
* @param files 附件列表
|
||||||
|
* @since 3.2.0
|
||||||
|
*/
|
||||||
|
public static void send(MailAccount mailAccount, String to, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
|
send(mailAccount, splitAddress(to), subject, content, imageMap, isHtml, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送邮件给多人
|
||||||
|
*
|
||||||
|
* @param mailAccount 邮件帐户信息
|
||||||
|
* @param tos 收件人列表
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param isHtml 是否为HTML格式
|
||||||
|
* @param files 附件列表
|
||||||
|
*/
|
||||||
|
public static void send(MailAccount mailAccount, Collection<String> tos, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
|
send(mailAccount, tos, null, null, subject, content, imageMap, isHtml, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送邮件给多人
|
||||||
|
*
|
||||||
|
* @param mailAccount 邮件帐户信息
|
||||||
|
* @param tos 收件人列表
|
||||||
|
* @param ccs 抄送人列表,可以为null或空
|
||||||
|
* @param bccs 密送人列表,可以为null或空
|
||||||
|
* @param subject 标题
|
||||||
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
|
* @param isHtml 是否为HTML格式
|
||||||
|
* @param files 附件列表
|
||||||
|
* @since 4.0.3
|
||||||
|
*/
|
||||||
|
public static void send(MailAccount mailAccount, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
|
send(mailAccount, false, tos, ccs, bccs, subject, content, imageMap, isHtml, files);
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------------ Private method start
|
//------------------------------------------------------------------------------------------------------------------------ Private method start
|
||||||
@ -186,11 +330,12 @@ public class MailUtil {
|
|||||||
* @param bccs 密送人列表,可以为null或空
|
* @param bccs 密送人列表,可以为null或空
|
||||||
* @param subject 标题
|
* @param subject 标题
|
||||||
* @param content 正文
|
* @param content 正文
|
||||||
|
* @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER
|
||||||
* @param isHtml 是否为HTML格式
|
* @param isHtml 是否为HTML格式
|
||||||
* @param files 附件列表
|
* @param files 附件列表
|
||||||
* @since 4.0.3
|
* @since 4.0.3
|
||||||
*/
|
*/
|
||||||
private static void send(MailAccount mailAccount, boolean useGlobalSession, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
|
private static void send(MailAccount mailAccount, boolean useGlobalSession, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
|
||||||
final Mail mail = Mail.create(mailAccount).setUseGlobalSession(useGlobalSession);
|
final Mail mail = Mail.create(mailAccount).setUseGlobalSession(useGlobalSession);
|
||||||
|
|
||||||
//可选抄送人
|
//可选抄送人
|
||||||
@ -207,6 +352,7 @@ public class MailUtil {
|
|||||||
mail.setContent(content);
|
mail.setContent(content);
|
||||||
mail.setHtml(isHtml);
|
mail.setHtml(isHtml);
|
||||||
mail.setFiles(files);
|
mail.setFiles(files);
|
||||||
|
mail.setImageMap(imageMap);
|
||||||
|
|
||||||
mail.send();
|
mail.send();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user