mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-03 20:27:58 +08:00
fix mail bug
This commit is contained in:
parent
afbfcb4993
commit
1fa812137d
@ -9,6 +9,7 @@
|
||||
* 【core】 ArrayUtil.isEmpty可变长参数改为数组(issue#555@Github)
|
||||
|
||||
### Bug修复
|
||||
* 【extra】 修复Mail中sslEnable无效问题(pr#74@Gitee)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
@ -25,7 +25,7 @@ public class SystemClock {
|
||||
|
||||
/**
|
||||
* 构造
|
||||
* @param period
|
||||
* @param period 时钟更新间隔,单位毫秒
|
||||
*/
|
||||
private SystemClock(long period) {
|
||||
this.period = period;
|
||||
|
@ -34,6 +34,16 @@ public class Base64Test {
|
||||
Assert.assertEquals(a, decodeStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void encodeAndDecodeTest3() {
|
||||
String a = ":";
|
||||
String encode = Base64.encode(a);
|
||||
Assert.assertEquals("Og==", encode);
|
||||
|
||||
String decodeStr = Base64.decodeStr(encode);
|
||||
Assert.assertEquals(a, decodeStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void urlSafeEncodeAndDecodeTest() {
|
||||
String a = "广州伦家需要安全感55";
|
||||
|
@ -4,6 +4,7 @@ import java.io.Serializable;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Properties;
|
||||
|
||||
import cn.hutool.core.lang.Console;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.setting.Setting;
|
||||
@ -12,7 +13,6 @@ import cn.hutool.setting.Setting;
|
||||
* 邮件账户对象
|
||||
*
|
||||
* @author Luxiaolei
|
||||
*
|
||||
*/
|
||||
public class MailAccount implements Serializable {
|
||||
private static final long serialVersionUID = -6937313421815719204L;
|
||||
@ -24,11 +24,11 @@ public class MailAccount implements Serializable {
|
||||
private static final String SMTP_CONNECTION_TIMEOUT = "mail.smtp.connectiontimeout";
|
||||
private static final String SMTP_TIMEOUT = "mail.smtp.timeout";
|
||||
|
||||
private static final String STARTTTLS_ENABLE = "mail.smtp.starttls.enable";
|
||||
private static final String SSL_ENABLE = "mail.smtp.ssl.enable";
|
||||
private static final String SOCKEY_FACTORY = "mail.smtp.socketFactory.class";
|
||||
private static final String SOCKEY_FACTORY_FALLBACK = "mail.smtp.socketFactory.fallback";
|
||||
private static final String SOCKEY_FACTORY_PORT = "smtp.socketFactory.port";
|
||||
private static final String STARTTLS_ENABLE = "mail.smtp.starttls.enable";
|
||||
private static final String SSL_ENABLE = "mail.smtp.ssl.enable";
|
||||
private static final String SOCKET_FACTORY = "mail.smtp.socketFactory.class";
|
||||
private static final String SOCKET_FACTORY_FALLBACK = "mail.smtp.socketFactory.fallback";
|
||||
private static final String SOCKET_FACTORY_PORT = "smtp.socketFactory.port";
|
||||
|
||||
private static final String MAIL_DEBUG = "mail.debug";
|
||||
private static final String SPLIT_LONG_PARAMS = "mail.mime.splitlongparameters";
|
||||
@ -37,43 +37,76 @@ public class MailAccount implements Serializable {
|
||||
public static final String MAIL_SETTING_PATH2 = "config/mailAccount.setting";
|
||||
public static final String MAIL_SETTING_PATH3 = "mail.setting";
|
||||
|
||||
/** SMTP服务器域名 */
|
||||
/**
|
||||
* SMTP服务器域名
|
||||
*/
|
||||
private String host;
|
||||
/** SMTP服务端口 */
|
||||
/**
|
||||
* SMTP服务端口
|
||||
*/
|
||||
private Integer port;
|
||||
/** 是否需要用户名密码验证 */
|
||||
/**
|
||||
* 是否需要用户名密码验证
|
||||
*/
|
||||
private Boolean auth;
|
||||
/** 用户名 */
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String user;
|
||||
/** 密码 */
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String pass;
|
||||
/** 发送方,遵循RFC-822标准 */
|
||||
/**
|
||||
* 发送方,遵循RFC-822标准
|
||||
*/
|
||||
private String from;
|
||||
|
||||
/** 是否打开调试模式,调试模式会显示与邮件服务器通信过程,默认不开启 */
|
||||
/**
|
||||
* 是否打开调试模式,调试模式会显示与邮件服务器通信过程,默认不开启
|
||||
*/
|
||||
private boolean debug;
|
||||
/** 编码用于编码邮件正文和发送人、收件人等中文 */
|
||||
/**
|
||||
* 编码用于编码邮件正文和发送人、收件人等中文
|
||||
*/
|
||||
private Charset charset = CharsetUtil.CHARSET_UTF_8;
|
||||
/** 对于超长参数是否切分为多份,默认为false(国内邮箱附件不支持切分的附件名) */
|
||||
/**
|
||||
* 对于超长参数是否切分为多份,默认为false(国内邮箱附件不支持切分的附件名)
|
||||
*/
|
||||
private boolean splitlongparameters;
|
||||
|
||||
/** 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。它将纯文本连接升级为加密连接(TLS或SSL), 而不是使用一个单独的加密通信端口。 */
|
||||
private boolean startttlsEnable = false;
|
||||
/** 使用 SSL安全连接 */
|
||||
/**
|
||||
* 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。它将纯文本连接升级为加密连接(TLS或SSL), 而不是使用一个单独的加密通信端口。
|
||||
*/
|
||||
private boolean starttlsEnable = false;
|
||||
/**
|
||||
* 使用 SSL安全连接
|
||||
*/
|
||||
private Boolean sslEnable;
|
||||
/** 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字 */
|
||||
/**
|
||||
* 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
|
||||
*/
|
||||
private String socketFactoryClass = "javax.net.ssl.SSLSocketFactory";
|
||||
/** 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true */
|
||||
/**
|
||||
* 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
|
||||
*/
|
||||
private boolean socketFactoryFallback;
|
||||
/** 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口 */
|
||||
/**
|
||||
* 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口
|
||||
*/
|
||||
private int socketFactoryPort = 465;
|
||||
|
||||
/** SMTP超时时长,单位毫秒,缺省值不超时 */
|
||||
/**
|
||||
* SMTP超时时长,单位毫秒,缺省值不超时
|
||||
*/
|
||||
private long timeout;
|
||||
/** Socket连接超时值,单位毫秒,缺省值不超时 */
|
||||
/**
|
||||
* Socket连接超时值,单位毫秒,缺省值不超时
|
||||
*/
|
||||
private long connectionTimeout;
|
||||
|
||||
// -------------------------------------------------------------- Constructor start
|
||||
|
||||
/**
|
||||
* 构造,所有参数需自行定义或保持默认值
|
||||
*/
|
||||
@ -99,6 +132,7 @@ public class MailAccount implements Serializable {
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------- Constructor end
|
||||
|
||||
/**
|
||||
* 获得SMTP服务器域名
|
||||
*
|
||||
@ -289,8 +323,8 @@ public class MailAccount implements Serializable {
|
||||
*
|
||||
* @return 是否使用 STARTTLS安全连接
|
||||
*/
|
||||
public boolean isStartttlsEnable() {
|
||||
return this.startttlsEnable;
|
||||
public boolean isStarttlsEnable() {
|
||||
return this.starttlsEnable;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -299,8 +333,8 @@ public class MailAccount implements Serializable {
|
||||
* @param startttlsEnable 是否使用STARTTLS安全连接
|
||||
* @return this
|
||||
*/
|
||||
public MailAccount setStartttlsEnable(boolean startttlsEnable) {
|
||||
this.startttlsEnable = startttlsEnable;
|
||||
public MailAccount setStarttlsEnable(boolean startttlsEnable) {
|
||||
this.starttlsEnable = startttlsEnable;
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -327,7 +361,7 @@ public class MailAccount implements Serializable {
|
||||
/**
|
||||
* 获取指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
|
||||
*
|
||||
* @return 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
|
||||
* @return 指定实现javax.net.SocketFactory接口的类的名称, 这个类将被用于创建SMTP的套接字
|
||||
*/
|
||||
public String getSocketFactoryClass() {
|
||||
return socketFactoryClass;
|
||||
@ -347,7 +381,7 @@ public class MailAccount implements Serializable {
|
||||
/**
|
||||
* 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
|
||||
*
|
||||
* @return 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
|
||||
* @return 如果设置为true, 未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
|
||||
*/
|
||||
public boolean isSocketFactoryFallback() {
|
||||
return socketFactoryFallback;
|
||||
@ -386,6 +420,7 @@ public class MailAccount implements Serializable {
|
||||
|
||||
/**
|
||||
* 设置SMTP超时时长,单位毫秒,缺省值不超时
|
||||
*
|
||||
* @param timeout SMTP超时时长,单位毫秒,缺省值不超时
|
||||
* @return this
|
||||
* @since 4.1.17
|
||||
@ -397,6 +432,7 @@ public class MailAccount implements Serializable {
|
||||
|
||||
/**
|
||||
* 设置Socket连接超时值,单位毫秒,缺省值不超时
|
||||
*
|
||||
* @param connectionTimeout Socket连接超时值,单位毫秒,缺省值不超时
|
||||
* @return this
|
||||
* @since 4.1.17
|
||||
@ -420,31 +456,31 @@ public class MailAccount implements Serializable {
|
||||
p.put(SMTP_HOST, this.host);
|
||||
p.put(SMTP_PORT, String.valueOf(this.port));
|
||||
p.put(SMTP_AUTH, String.valueOf(this.auth));
|
||||
if(this.timeout > 0) {
|
||||
if (this.timeout > 0) {
|
||||
p.put(SMTP_TIMEOUT, String.valueOf(this.timeout));
|
||||
}
|
||||
if(this.connectionTimeout > 0) {
|
||||
if (this.connectionTimeout > 0) {
|
||||
p.put(SMTP_CONNECTION_TIMEOUT, String.valueOf(this.connectionTimeout));
|
||||
}
|
||||
|
||||
p.put(MAIL_DEBUG, String.valueOf(this.debug));
|
||||
|
||||
if (this.startttlsEnable) {
|
||||
if (this.starttlsEnable) {
|
||||
//STARTTLS是对纯文本通信协议的扩展。它将纯文本连接升级为加密连接(TLS或SSL), 而不是使用一个单独的加密通信端口。
|
||||
p.put(STARTTTLS_ENABLE, String.valueOf(this.startttlsEnable));
|
||||
p.put(STARTTLS_ENABLE, String.valueOf(this.starttlsEnable));
|
||||
|
||||
if(null == this.sslEnable) {
|
||||
//为了兼容旧版本,当用户没有此项配置时,按照startttlsEnable开启状态时对待
|
||||
if (null == this.sslEnable) {
|
||||
//为了兼容旧版本,当用户没有此项配置时,按照starttlsEnable开启状态时对待
|
||||
this.sslEnable = true;
|
||||
}
|
||||
}
|
||||
|
||||
// SSL
|
||||
if(null != this.sslEnable && this.sslEnable) {
|
||||
p.put(SSL_ENABLE, sslEnable);
|
||||
p.put(SOCKEY_FACTORY, socketFactoryClass);
|
||||
p.put(SOCKEY_FACTORY_FALLBACK, String.valueOf(this.socketFactoryFallback));
|
||||
p.put(SOCKEY_FACTORY_PORT, String.valueOf(this.socketFactoryPort));
|
||||
if (null != this.sslEnable && this.sslEnable) {
|
||||
p.put(SSL_ENABLE, "true");
|
||||
p.put(SOCKET_FACTORY, socketFactoryClass);
|
||||
p.put(SOCKET_FACTORY_FALLBACK, String.valueOf(this.socketFactoryFallback));
|
||||
p.put(SOCKET_FACTORY_PORT, String.valueOf(this.socketFactoryPort));
|
||||
}
|
||||
|
||||
return p;
|
||||
@ -486,6 +522,6 @@ public class MailAccount implements Serializable {
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MailAccount [host=" + host + ", port=" + port + ", auth=" + auth + ", user=" + user + ", pass=" + (StrUtil.isEmpty(this.pass) ? "" : "******") + ", from=" + from + ", startttlsEnable="
|
||||
+ startttlsEnable + ", socketFactoryClass=" + socketFactoryClass + ", socketFactoryFallback=" + socketFactoryFallback + ", socketFactoryPort=" + socketFactoryPort + "]";
|
||||
+ starttlsEnable + ", socketFactoryClass=" + socketFactoryClass + ", socketFactoryFallback=" + socketFactoryFallback + ", socketFactoryPort=" + socketFactoryPort + "]";
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class MailTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
// @Ignore
|
||||
public void sendHtmlTest() {
|
||||
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true);
|
||||
}
|
||||
|
@ -14,5 +14,9 @@ from = 小磊<hutool@yeah.net>
|
||||
user = hutool
|
||||
# 密码
|
||||
pass = q1w2e3
|
||||
#使用 STARTTLS安全连接
|
||||
startttlsEnable = true
|
||||
# 使用 STARTTLS安全连接
|
||||
starttlsEnable = true
|
||||
# 是否开启SSL
|
||||
sslEnable = true
|
||||
# 调试模式
|
||||
debug = true
|
Loading…
Reference in New Issue
Block a user