如何为 javamail 使用特定的协议?

How to use a particular protocol for javamail?

有javamail协议属性

mail.smtp.ssl.protocols

这允许用户使用特定协议(TLSv1.2 或 1.1)。

不使用属性怎么办? JVM settings 会设置它吗?

此外,如果我想使用 TLSv1.3,我必须使用哪个版本的 Javamail?

谢谢

在 1.5.3 以下的 javamail 版本中,如果未设置 sysprop,它将使用 TLSv1.0,它 (1) 在 Java 的最新版本上根本不起作用,(2) 不会与越来越多的服务器一起工作,因为 1.0 是由 BEAST 短暂 'broken' 并且许多当局不再允许它。请参阅 ,尤其是我的答案中标记为“编辑”的部分。

在较新的版本中,正如您在此处链接的源代码中所见,它使用 JVM 默认值,除非它删除了 SSL 版本(如果存在)——并且自 2015 年以来的所有 Java 版本都从 JVM 中省略了 SSLv3默认值(因为 really 被 POODLE 破坏了)。 (SSLv2Hello 无论如何都不是实际的协议版本,甚至更早被删除。)

要使用 TLSv1.3,您需要支持它的 Java 版本:11 或 8u261 或任何非荒谬的 Java安装和配置了足够新版本的 BouncyCastle BCTLS 的版本,而不是或至少在 JSSE 之前——当然还有支持它的服务器。 Javamail 只是将此设置作为一组字符串传递给 JSSE 或 BCTLS,它不需要针对包括 1.3 在内的不同版本的 TLS 的新代码。