diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/InternalMailUtil.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/InternalMailUtil.java index 42d8db189a..9f7628050f 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/InternalMailUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/InternalMailUtil.java @@ -17,10 +17,12 @@ package cn.hutool.v7.extra.mail; import cn.hutool.v7.core.array.ArrayUtil; - +import cn.hutool.v7.core.text.StrUtil; +import cn.hutool.v7.core.util.ObjUtil; import jakarta.mail.internet.AddressException; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeUtility; + import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; @@ -29,6 +31,7 @@ import java.util.List; /** * 邮件内部工具类 + * * @author Looly * @since 3.2.3 */ @@ -39,12 +42,14 @@ public class InternalMailUtil { * 单个字符串地址可以是多个地址合并的字符串 * * @param addrStrs 地址数组 - * @param charset 编码(主要用于中文用户名的编码) + * @param charset 编码(主要用于中文用户名的编码) * @return 地址数组 * @since 4.0.3 */ public static InternetAddress[] parseAddressFromStrs(final String[] addrStrs, final Charset charset) { - if (ArrayUtil.isEmpty(addrStrs)) return new InternetAddress[0]; + if (ArrayUtil.isEmpty(addrStrs)) { + return new InternetAddress[0]; + } final List resultList = new ArrayList<>(addrStrs.length); InternetAddress[] addrs; for (final String addrStr : addrStrs) { @@ -79,11 +84,14 @@ public class InternalMailUtil { * 将一个地址字符串解析为多个地址
* 地址间使用" "、","、";"分隔 * - * @param address 地址字符串 + * @param address 地址字符串,如果为空,返回空数组 * @param charset 编码,{@code null}表示使用系统属性定义的编码或系统编码 * @return 地址列表 */ public static InternetAddress[] parseAddress(final String address, final Charset charset) { + if (StrUtil.isBlank(address)) { + return new InternetAddress[0]; + } final InternetAddress[] addresses; try { addresses = InternetAddress.parse(address); @@ -92,7 +100,7 @@ public class InternalMailUtil { } //编码用户名 if (ArrayUtil.isNotEmpty(addresses)) { - final String charsetStr = null == charset ? null : charset.name(); + final String charsetStr = ObjUtil.apply(charset, Charset::name); for (final InternetAddress internetAddress : addresses) { try { internetAddress.setPersonal(internetAddress.getPersonal(), charsetStr); @@ -109,15 +117,17 @@ public class InternalMailUtil { * 编码中文字符
* 编码失败返回原字符串 * - * @param text 被编码的文本 + * @param text 被编码的文本 * @param charset 编码 * @return 编码后的结果 */ public static String encodeText(final String text, final Charset charset) { - try { - return MimeUtility.encodeText(text, charset.name(), null); - } catch (final UnsupportedEncodingException e) { - // ignore + if (StrUtil.isNotBlank(text)) { + try { + return MimeUtility.encodeText(text, charset.name(), null); + } catch (final UnsupportedEncodingException e) { + // ignore + } } return text; } diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/SMTPMessage.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/SMTPMessage.java index 2346a2ca57..38bb35cc4c 100644 --- a/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/SMTPMessage.java +++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/mail/SMTPMessage.java @@ -51,12 +51,12 @@ public class SMTPMessage extends MimeMessage { /** * 创建SMTP消息 * - * @param mailAccount 邮件账户 + * @param mailAccount 邮件账户 * @param useGlobalSession 是否使用全局Session - * @param debugOutput 输出调试信息 + * @param debugOutput 输出调试信息 * @return this */ - public static SMTPMessage of(final MailAccount mailAccount, final boolean useGlobalSession, final PrintStream debugOutput){ + public static SMTPMessage of(final MailAccount mailAccount, final boolean useGlobalSession, final PrintStream debugOutput) { final Session session = MailUtil.getSession(mailAccount, useGlobalSession); if (null != debugOutput) { session.setDebugOut(debugOutput); @@ -339,25 +339,24 @@ public class SMTPMessage extends MimeMessage { } } - /** - * 构建邮件信息主体 - * - * @param content 内容, {@code null}则使用{@link StrUtil#EMPTY}替换 - * @param charset 编码,{@code null}则使用{@link MimeUtility#getDefaultJavaCharset()} - * @param isHtml 是否为HTML - * @return 邮件信息主体 - * @throws MessagingException 消息异常 - */ - private Multipart buildContent(final String content, final Charset charset, final boolean isHtml) throws MessagingException { - final String charsetStr = null != charset ? charset.name() : MimeUtility.getDefaultJavaCharset(); - // 内容如果是null会抛异常, 使用空字符串代替 - final String contentStr = content == null ? StrUtil.EMPTY : content; - // 正文 - final MimeBodyPart body = new MimeBodyPart(); - body.setContent(contentStr, StrUtil.format("text/{}; charset={}", isHtml ? "html" : "plain", charsetStr)); - addBodyPart(body, 0); - return this.multipart; - } + /** + * 构建邮件信息主体 + * + * @param content 内容, {@code null}则使用{@link StrUtil#EMPTY}替换 + * @param charset 编码,{@code null}则使用{@link MimeUtility#getDefaultJavaCharset()} + * @param isHtml 是否为HTML + * @return 邮件信息主体 + * @throws MessagingException 消息异常 + */ + private Multipart buildContent(final String content, final Charset charset, final boolean isHtml) throws MessagingException { + final String charsetStr = null != charset ? charset.name() : MimeUtility.getDefaultJavaCharset(); + // 正文 + final MimeBodyPart body = new MimeBodyPart(); + // 内容如果是null会抛异常, 使用空字符串代替 + body.setContent(StrUtil.emptyIfNull(content), StrUtil.format("text/{}; charset={}", isHtml ? "html" : "plain", charsetStr)); + addBodyPart(body, 0); + return this.multipart; + } /** * 执行发送