gpt4 book ai didi

JavaMail 连接超时不按照属性工作

转载 作者:行者123 更新时间:2023-12-01 21:28:52 30 4
gpt4 key购买 nike

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与写入大小可能不同的数据 block 有关。

这些超时均不代表发送 MIME 消息的单个事务的截止日期。发生的情况是没有超过 3000 毫秒的单个操作(连接、读取、写入)。

例如,连接可能需要 1000 毫秒,然后是 30 次请求(写入)和响应解析(读取)需要 100 毫秒,并且假设 3 次写入以发送消息,由于网络速度,每次需要 1000 毫秒和消息的大小。即 1000 + (30 * 100) + (3 * 1000) = 7000 毫秒的总时间,但没有一个 Action 超过超时。

在测试环境中

  1. 将所有超时设置为 3000。
  2. connecttimeout 设置为 1 并进行测试。您应该会看到连接失败。
  3. 通过将其设置回 3000 并将 timeout 设置为 1 来重新启动测试。您应该会看到读取失败。
  4. 通过将其设置回 3000 并将 writetimeout 设置为 1 来重新启动测试。您应该会看到传输失败。

如果测试没有以这种方式运行,则说明您没有正确设置属性(拼写错误或 smtp 与 smtps)。或者您真的很幸运能够拥有如此低的延迟。

关于JavaMail 连接超时不按照属性工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62698967/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com