JavaMail 连接超时不按照属性工作
JavaMail connection timeout is not working as per properties
Javax 邮件版本使用 1.6.2
手动设置 JavaMailSender
我用 mail.smtp.timeout 和 mail.smtps.timeout 尝试过超时。
而且,我尝试使用字符串和整数值 3000。
String timeOut = "3000";
Properties pros = new Properties();
pros.put("mail.smtp.timeout", timeOut);
pros.put("mail.smtp.connectiontimeout", timeOut);
pros.put("mail.smtp.writetimeout", timeOut);
pros.put("mail.smtp.auth", "true");
pros.put("mail.smtp.starttls.enable", "true");
jmailSender.setJavaMailProperties(pros);
return jmailSender;
大约需要 7 秒,没有任何失败。
由于默认情况下是无限的,所以很可能它没有以某种方式设置
是否缺少任何属性或其他内容?
属性 mail.smtp.connectiontimeout
and `mail.smtps.connectiontimeout 仅在建立连接时适用。它与传输过程中的任何超时无关。
属性mail.smtp.timeout
and mail.smtps.timeout
与阻塞等待读取的时间有关。这与读取 SMTP 响应代码有关。
属性 mail.smtp.writetimeout
and mail.smtps.writetimeout
与写入大小可变的数据块有关。
None 这些超时表示发送 MIME 消息的单个事务的截止日期。发生的情况是没有超过 3000 毫秒的单个操作(连接、读取、写入)。
例如,连接可能需要 1000 毫秒,然后是 30 次请求(写入)和响应解析(读取)需要 100 毫秒,并且由于速度的原因,假设 3 次写入发送消息每次需要 1000 毫秒消息的网络和大小。即 1000 + (30 * 100) + (3 * 1000) = 7000 毫秒总时间,但没有单个操作超过超时。
在测试环境中
- 将所有超时设置为 3000。
- 设置
connectimeout
为1并测试。您应该会看到连接失败。
- 通过将其设置回 3000 并将
timeout
设置为 1 来重新启动测试。您应该会看到读取失败。
- 通过将其设置回 3000 并将
writetimeout
设置为 1 来重新启动测试。您应该会看到传输失败。
如果测试没有按这种方式进行,则说明您没有正确设置属性(错字或 smtp 与 smtps)。或者你真的很幸运能有这么低的延迟。
Javax 邮件版本使用 1.6.2
手动设置 JavaMailSender
我用 mail.smtp.timeout 和 mail.smtps.timeout 尝试过超时。
而且,我尝试使用字符串和整数值 3000。
String timeOut = "3000";
Properties pros = new Properties();
pros.put("mail.smtp.timeout", timeOut);
pros.put("mail.smtp.connectiontimeout", timeOut);
pros.put("mail.smtp.writetimeout", timeOut);
pros.put("mail.smtp.auth", "true");
pros.put("mail.smtp.starttls.enable", "true");
jmailSender.setJavaMailProperties(pros);
return jmailSender;
大约需要 7 秒,没有任何失败。 由于默认情况下是无限的,所以很可能它没有以某种方式设置
是否缺少任何属性或其他内容?
属性 mail.smtp.connectiontimeout
and `mail.smtps.connectiontimeout 仅在建立连接时适用。它与传输过程中的任何超时无关。
属性mail.smtp.timeout
and mail.smtps.timeout
与阻塞等待读取的时间有关。这与读取 SMTP 响应代码有关。
属性 mail.smtp.writetimeout
and mail.smtps.writetimeout
与写入大小可变的数据块有关。
None 这些超时表示发送 MIME 消息的单个事务的截止日期。发生的情况是没有超过 3000 毫秒的单个操作(连接、读取、写入)。
例如,连接可能需要 1000 毫秒,然后是 30 次请求(写入)和响应解析(读取)需要 100 毫秒,并且由于速度的原因,假设 3 次写入发送消息每次需要 1000 毫秒消息的网络和大小。即 1000 + (30 * 100) + (3 * 1000) = 7000 毫秒总时间,但没有单个操作超过超时。
在测试环境中
- 将所有超时设置为 3000。
- 设置
connectimeout
为1并测试。您应该会看到连接失败。 - 通过将其设置回 3000 并将
timeout
设置为 1 来重新启动测试。您应该会看到读取失败。 - 通过将其设置回 3000 并将
writetimeout
设置为 1 来重新启动测试。您应该会看到传输失败。
如果测试没有按这种方式进行,则说明您没有正确设置属性(错字或 smtp 与 smtps)。或者你真的很幸运能有这么低的延迟。