JavaMail连接超时未按属性运行

JavaMail连接超时未按属性运行,java,jakarta-mail,connection-timeout,Java,Jakarta Mail,Connection Timeout,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("

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秒,没有任何故障。 因为默认情况下是无限的,所以很可能它并没有以某种方式设置

是否缺少任何属性或其他内容?

这些属性仅在建立连接时适用。这与运输期间的任何超时无关

这些属性与被阻止等待读取的时间有关。这与读取SMTP响应代码有关

这些属性与写入大小不同的数据块有关

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

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

在测试环境中

  • 将所有超时设置为3000
  • connectimeout
    设置为1并进行测试。您应该会看到连接失败
  • 通过将其设置回3000并将
    timeout
    设置为1来重新启动测试。您应该看到读取失败
  • 通过将其设置回3000并将
    writetimeout
    设置为1来重新启动测试。您应该看到传输失败
  • 如果测试没有以这种方式进行,您可能没有正确设置属性(打字错误或smtp与smtps)。或者,您真的很幸运拥有如此低的延迟。

    这些属性仅在建立连接时适用。这与运输期间的任何超时无关

    这些属性与被阻止等待读取的时间有关。这与读取SMTP响应代码有关

    这些属性与写入大小不同的数据块有关

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

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

    在测试环境中

  • 将所有超时设置为3000
  • connectimeout
    设置为1并进行测试。您应该会看到连接失败
  • 通过将其设置回3000并将
    timeout
    设置为1来重新启动测试。您应该看到读取失败
  • 通过将其设置回3000并将
    writetimeout
    设置为1来重新启动测试。您应该看到传输失败
  • 如果测试没有以这种方式进行,您可能没有正确设置属性(打字错误或smtp与smtps)。或者你真的很幸运有这么低的延迟