From de80af155cc79d8356bd16e8483d96d8d76b181c Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 22 Nov 2019 07:58:48 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 2 + .../main/java/cn/hutool/extra/mail/Mail.java | 13 +- .../java/cn/hutool/extra/mail/MailUtil.java | 344 ++++++++++-------- .../java/cn/hutool/extra/mail/MailTest.java | 2 +- 4 files changed, 194 insertions(+), 167 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 589e2e735..9285dd1e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,11 @@ ### 新特性 * 【core 】 解决NumberUtil导致的ambiguous问题(issue#630@Github) * 【core 】 BeanUtil.isEmpty()忽略字段支持,增加isNotEmpty(issue#629@Github) +* 【extra 】 邮件发送后获取message-id(issue#I15FKR@Gitee) ### Bug修复 * 【extra】 修复SFTP.upload上传失败的问题 +* 【db】 修复findLike匹配错误问题 ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java b/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java index 4c9382f85..d3d2284a5 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java @@ -349,10 +349,10 @@ public class Mail { /** * 发送 * - * @return this + * @return message-id * @throws MailException 邮件发送异常 */ - public Mail send() throws MailException { + public String send() throws MailException { try { return doSend(); } catch (MessagingException e) { @@ -365,12 +365,13 @@ public class Mail { /** * 执行发送 * - * @return this + * @return message-id * @throws MessagingException 发送异常 */ - private Mail doSend() throws MessagingException { - Transport.send(buildMsg()); - return this; + private String doSend() throws MessagingException { + final MimeMessage mimeMessage = buildMsg(); + Transport.send(mimeMessage); + return mimeMessage.getMessageID(); } /** diff --git a/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java index d4fe5f873..adfd5bed0 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/mail/MailUtil.java @@ -14,7 +14,7 @@ import cn.hutool.core.util.StrUtil; /** * 邮件工具类,基于javax.mail封装 - * + * * @author looly * @since 3.1.2 */ @@ -23,325 +23,349 @@ public class MailUtil { * 使用配置文件中设置的账户发送文本邮件,发送给单个或多个收件人
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔 * - * @param to 收件人 + * @param to 收件人 * @param subject 标题 * @param content 正文 - * @param files 附件列表 + * @param files 附件列表 + * @return message-id * @since 3.2.0 */ - public static void sendText(String to, String subject, String content, File... files) { - send(to, subject, content, false, files); + public static String sendText(String to, String subject, String content, File... files) { + return send(to, subject, content, false, files); } /** * 使用配置文件中设置的账户发送HTML邮件,发送给单个或多个收件人
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔 * - * @param to 收件人 + * @param to 收件人 * @param subject 标题 * @param content 正文 - * @param files 附件列表 + * @param files 附件列表 + * @return message-id * @since 3.2.0 */ - public static void sendHtml(String to, String subject, String content, File... files) { - send(to, subject, content, true, files); + public static String sendHtml(String to, String subject, String content, File... files) { + return send(to, subject, content, true, files); } /** * 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔 * - * @param to 收件人 + * @param to 收件人 * @param subject 标题 * @param content 正文 - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id */ - public static void send(String to, String subject, String content, boolean isHtml, File... files) { - send(splitAddress(to), subject, content, isHtml, files); + public static String send(String to, String subject, String content, boolean isHtml, File... files) { + return send(splitAddress(to), subject, content, isHtml, files); } /** * 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
* 多个收件人、抄送人、密送人可以使用逗号“,”分隔,也可以通过分号“;”分隔 * - * @param to 收件人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * @param cc 抄送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * @param bcc 密送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 + * @param to 收件人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 + * @param cc 抄送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 + * @param bcc 密送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 * @param subject 标题 * @param content 正文 - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id * @since 4.0.3 */ - public static void send(String to, String cc, String bcc, String subject, String content, boolean isHtml, File... files) { - send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, isHtml, files); + public static String send(String to, String cc, String bcc, String subject, String content, boolean isHtml, File... files) { + return send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, isHtml, files); } /** * 使用配置文件中设置的账户发送文本邮件,发送给多人 * - * @param tos 收件人列表 + * @param tos 收件人列表 * @param subject 标题 * @param content 正文 - * @param files 附件列表 + * @param files 附件列表 + * @return message-id */ - public static void sendText(Collection tos, String subject, String content, File... files) { - send(tos, subject, content, false, files); + public static String sendText(Collection tos, String subject, String content, File... files) { + return send(tos, subject, content, false, files); } /** * 使用配置文件中设置的账户发送HTML邮件,发送给多人 * - * @param tos 收件人列表 + * @param tos 收件人列表 * @param subject 标题 * @param content 正文 - * @param files 附件列表 + * @param files 附件列表 + * @return message-id * @since 3.2.0 */ - public static void sendHtml(Collection tos, String subject, String content, File... files) { - send(tos, subject, content, true, files); + public static String sendHtml(Collection tos, String subject, String content, File... files) { + return send(tos, subject, content, true, files); } /** * 使用配置文件中设置的账户发送邮件,发送给多人 * - * @param tos 收件人列表 + * @param tos 收件人列表 * @param subject 标题 * @param content 正文 - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id */ - public static void send(Collection tos, String subject, String content, boolean isHtml, File... files) { - send(tos, null, null, subject, content, isHtml, files); + public static String send(Collection tos, String subject, String content, boolean isHtml, File... files) { + return send(tos, null, null, subject, content, isHtml, files); } /** * 使用配置文件中设置的账户发送邮件,发送给多人 * - * @param tos 收件人列表 - * @param ccs 抄送人列表,可以为null或空 - * @param bccs 密送人列表,可以为null或空 + * @param tos 收件人列表 + * @param ccs 抄送人列表,可以为null或空 + * @param bccs 密送人列表,可以为null或空 * @param subject 标题 * @param content 正文 - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id * @since 4.0.3 */ - public static void send(Collection tos, Collection ccs, Collection bccs, String subject, String content, boolean isHtml, File... files) { - send(GlobalMailAccount.INSTANCE.getAccount(), true, tos, ccs, bccs, subject, content, null, isHtml, files); + public static String send(Collection tos, Collection ccs, Collection bccs, String subject, String content, boolean isHtml, File... files) { + return send(GlobalMailAccount.INSTANCE.getAccount(), true, tos, ccs, bccs, subject, content, null, isHtml, files); } // ------------------------------------------------------------------------------------------------------------------------------- Custom MailAccount + /** * 发送邮件给多人 * * @param mailAccount 邮件认证对象 - * @param to 收件人,多个收件人逗号或者分号隔开 - * @param subject 标题 - * @param content 正文 - * @param isHtml 是否为HTML格式 - * @param files 附件列表 + * @param to 收件人,多个收件人逗号或者分号隔开 + * @param subject 标题 + * @param content 正文 + * @param isHtml 是否为HTML格式 + * @param files 附件列表 + * @return message-id * @since 3.2.0 */ - public static void send(MailAccount mailAccount, String to, String subject, String content, boolean isHtml, File... files) { - send(mailAccount, splitAddress(to), subject, content, isHtml, files); + public static String send(MailAccount mailAccount, String to, String subject, String content, boolean isHtml, File... files) { + return send(mailAccount, splitAddress(to), subject, content, isHtml, files); } /** * 发送邮件给多人 * * @param mailAccount 邮件帐户信息 - * @param tos 收件人列表 - * @param subject 标题 - * @param content 正文 - * @param isHtml 是否为HTML格式 - * @param files 附件列表 + * @param tos 收件人列表 + * @param subject 标题 + * @param content 正文 + * @param isHtml 是否为HTML格式 + * @param files 附件列表 + * @return message-id */ - public static void send(MailAccount mailAccount, Collection tos, String subject, String content, boolean isHtml, File... files) { - send(mailAccount, tos, null, null, subject, content, isHtml, files); + public static String send(MailAccount mailAccount, Collection tos, String subject, String content, boolean isHtml, File... files) { + return send(mailAccount, tos, null, null, subject, content, isHtml, files); } /** * 发送邮件给多人 * * @param mailAccount 邮件帐户信息 - * @param tos 收件人列表 - * @param ccs 抄送人列表,可以为null或空 - * @param bccs 密送人列表,可以为null或空 - * @param subject 标题 - * @param content 正文 - * @param isHtml 是否为HTML格式 - * @param files 附件列表 + * @param tos 收件人列表 + * @param ccs 抄送人列表,可以为null或空 + * @param bccs 密送人列表,可以为null或空 + * @param subject 标题 + * @param content 正文 + * @param isHtml 是否为HTML格式 + * @param files 附件列表 + * @return message-id * @since 4.0.3 */ - public static void send(MailAccount mailAccount, Collection tos, Collection ccs, Collection bccs, String subject, String content, boolean isHtml, File... files) { - send(mailAccount, false, tos, ccs, bccs, subject, content, null, isHtml, files); + public static String send(MailAccount mailAccount, Collection tos, Collection ccs, Collection bccs, String subject, String content, boolean isHtml, File... files) { + return send(mailAccount, false, tos, ccs, bccs, subject, content, null, isHtml, files); } /** * 使用配置文件中设置的账户发送HTML邮件,发送给单个或多个收件人
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * - * @param to 收件人 - * @param subject 标题 - * @param content 正文 - * @param files 附件列表 + * + * @param to 收件人 + * @param subject 标题 + * @param content 正文 * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER + * @param files 附件列表 + * @return message-id * @since 3.2.0 */ - public static void sendHtml(String to, String subject, String content, Map imageMap, File... files) { - send(to, subject, content, imageMap, true, files); + public static String sendHtml(String to, String subject, String content, Map imageMap, File... files) { + return send(to, subject, content, imageMap, true, files); } /** * 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
* 多个收件人可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * - * @param to 收件人 - * @param subject 标题 - * @param content 正文 + * + * @param to 收件人 + * @param subject 标题 + * @param content 正文 * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id */ - public static void send(String to, String subject, String content, Map imageMap, boolean isHtml, File... files) { - send(splitAddress(to), subject, content, imageMap, isHtml, files); + public static String send(String to, String subject, String content, Map imageMap, boolean isHtml, File... files) { + return send(splitAddress(to), subject, content, imageMap, isHtml, files); } /** * 使用配置文件中设置的账户发送邮件,发送单个或多个收件人
* 多个收件人、抄送人、密送人可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * - * @param to 收件人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * @param cc 抄送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * @param bcc 密送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 - * @param subject 标题 - * @param content 正文 + * + * @param to 收件人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 + * @param cc 抄送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 + * @param bcc 密送人,可以使用逗号“,”分隔,也可以通过分号“;”分隔 + * @param subject 标题 + * @param content 正文 * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id * @since 4.0.3 */ - public static void send(String to, String cc, String bcc, String subject, String content, Map imageMap, boolean isHtml, File... files) { - send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, imageMap, isHtml, files); + public static String send(String to, String cc, String bcc, String subject, String content, Map imageMap, boolean isHtml, File... files) { + return send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, imageMap, isHtml, files); } /** * 使用配置文件中设置的账户发送HTML邮件,发送给多人 - * - * @param tos 收件人列表 - * @param subject 标题 - * @param content 正文 + * + * @param tos 收件人列表 + * @param subject 标题 + * @param content 正文 * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER - * @param files 附件列表 + * @param files 附件列表 + * @return message-id * @since 3.2.0 */ - public static void sendHtml(Collection tos, String subject, String content, Map imageMap, File... files) { - send(tos, subject, content, imageMap, true, files); + public static String sendHtml(Collection tos, String subject, String content, Map imageMap, File... files) { + return send(tos, subject, content, imageMap, true, files); } /** * 使用配置文件中设置的账户发送邮件,发送给多人 - * - * @param tos 收件人列表 - * @param subject 标题 - * @param content 正文 + * + * @param tos 收件人列表 + * @param subject 标题 + * @param content 正文 * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id */ - public static void send(Collection tos, String subject, String content, Map imageMap, boolean isHtml, File... files) { - send(tos, null, null, subject, content, imageMap, isHtml, files); + public static String send(Collection tos, String subject, String content, Map imageMap, boolean isHtml, File... files) { + return send(tos, null, null, subject, content, imageMap, isHtml, files); } /** * 使用配置文件中设置的账户发送邮件,发送给多人 - * - * @param tos 收件人列表 - * @param ccs 抄送人列表,可以为null或空 - * @param bccs 密送人列表,可以为null或空 - * @param subject 标题 - * @param content 正文 + * + * @param tos 收件人列表 + * @param ccs 抄送人列表,可以为null或空 + * @param bccs 密送人列表,可以为null或空 + * @param subject 标题 + * @param content 正文 * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER - * @param isHtml 是否为HTML - * @param files 附件列表 + * @param isHtml 是否为HTML + * @param files 附件列表 + * @return message-id * @since 4.0.3 */ - public static void send(Collection tos, Collection ccs, Collection bccs, String subject, String content, Map imageMap, boolean isHtml, File... files) { - send(GlobalMailAccount.INSTANCE.getAccount(), true, tos, ccs, bccs, subject, content, imageMap, isHtml, files); + public static String send(Collection tos, Collection ccs, Collection bccs, String subject, String content, Map imageMap, boolean isHtml, File... files) { + return 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 附件列表 + * @param to 收件人,多个收件人逗号或者分号隔开 + * @param subject 标题 + * @param content 正文 + * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER + * @param isHtml 是否为HTML格式 + * @param files 附件列表 + * @return message-id * @since 3.2.0 */ - public static void send(MailAccount mailAccount, String to, String subject, String content, Map imageMap, boolean isHtml, File... files) { - send(mailAccount, splitAddress(to), subject, content, imageMap, isHtml, files); + public static String send(MailAccount mailAccount, String to, String subject, String content, Map imageMap, boolean isHtml, File... files) { + return 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 附件列表 + * @param tos 收件人列表 + * @param subject 标题 + * @param content 正文 + * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER + * @param isHtml 是否为HTML格式 + * @param files 附件列表 + * @return message-id * @since 4.6.3 */ - public static void send(MailAccount mailAccount, Collection tos, String subject, String content, Map imageMap, boolean isHtml, File... files) { - send(mailAccount, tos, null, null, subject, content, imageMap, isHtml, files); + public static String send(MailAccount mailAccount, Collection tos, String subject, String content, Map imageMap, boolean isHtml, File... files) { + return 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 附件列表 + * @param tos 收件人列表 + * @param ccs 抄送人列表,可以为null或空 + * @param bccs 密送人列表,可以为null或空 + * @param subject 标题 + * @param content 正文 + * @param imageMap 图片与占位符,占位符格式为cid:$IMAGE_PLACEHOLDER + * @param isHtml 是否为HTML格式 + * @param files 附件列表 + * @return message-id * @since 4.6.3 */ - public static void send(MailAccount mailAccount, Collection tos, Collection ccs, Collection bccs, String subject, String content, Map imageMap, - boolean isHtml, File... files) { - send(mailAccount, false, tos, ccs, bccs, subject, content, imageMap, isHtml, files); + public static String send(MailAccount mailAccount, Collection tos, Collection ccs, Collection bccs, String subject, String content, Map imageMap, + boolean isHtml, File... files) { + return send(mailAccount, false, tos, ccs, bccs, subject, content, imageMap, isHtml, files); } // ------------------------------------------------------------------------------------------------------------------------ Private method start + /** * 发送邮件给多人 - * - * @param mailAccount 邮件帐户信息 + * + * @param mailAccount 邮件帐户信息 * @param useGlobalSession 是否全局共享Session - * @param tos 收件人列表 - * @param ccs 抄送人列表,可以为null或空 - * @param bccs 密送人列表,可以为null或空 - * @param subject 标题 - * @param content 正文 - * @param imageMap 图片与占位符,占位符格式为cid:${cid} - * @param isHtml 是否为HTML格式 - * @param files 附件列表 + * @param tos 收件人列表 + * @param ccs 抄送人列表,可以为null或空 + * @param bccs 密送人列表,可以为null或空 + * @param subject 标题 + * @param content 正文 + * @param imageMap 图片与占位符,占位符格式为cid:${cid} + * @param isHtml 是否为HTML格式 + * @param files 附件列表 + * @return message-id * @since 4.6.3 */ - private static void send(MailAccount mailAccount, boolean useGlobalSession, Collection tos, Collection ccs, Collection bccs, String subject, String content, - Map imageMap, boolean isHtml, File... files) { + private static String send(MailAccount mailAccount, boolean useGlobalSession, Collection tos, Collection ccs, Collection bccs, String subject, String content, + Map imageMap, boolean isHtml, File... files) { final Mail mail = Mail.create(mailAccount).setUseGlobalSession(useGlobalSession); // 可选抄送人 @@ -358,9 +382,9 @@ public class MailUtil { mail.setContent(content); mail.setHtml(isHtml); mail.setFiles(files); - + // 图片 - if(MapUtil.isNotEmpty(imageMap)) { + if (MapUtil.isNotEmpty(imageMap)) { for (Entry entry : imageMap.entrySet()) { mail.addImage(entry.getKey(), entry.getValue()); // 关闭流 @@ -368,12 +392,12 @@ public class MailUtil { } } - mail.send(); + return mail.send(); } /** * 将多个联系人转为列表,分隔符为逗号或者分号 - * + * * @param addresses 多个联系人,如果为空返回null * @return 联系人列表 */ diff --git a/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java b/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java index 998bed40f..bb7c166ec 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java @@ -40,7 +40,7 @@ public class MailTest { } @Test - @Ignore +// @Ignore public void sendHtmlTest() { MailUtil.send("hutool@foxmail.com", "测试", "

邮件来自Hutool测试

", true); }