mirror of
https://gitee.com/dromara/hutool.git
synced 2026-02-09 09:16:26 +08:00
fix bug
This commit is contained in:
@@ -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<InternetAddress> resultList = new ArrayList<>(addrStrs.length);
|
||||
InternetAddress[] addrs;
|
||||
for (final String addrStr : addrStrs) {
|
||||
@@ -79,11 +84,14 @@ public class InternalMailUtil {
|
||||
* 将一个地址字符串解析为多个地址<br>
|
||||
* 地址间使用" "、","、";"分隔
|
||||
*
|
||||
* @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 {
|
||||
* 编码中文字符<br>
|
||||
* 编码失败返回原字符串
|
||||
*
|
||||
* @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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行发送
|
||||
|
||||
Reference in New Issue
Block a user