首页 > 解决方案 > Java 邮件 IPv6 本地主机 EHLO

问题描述

我正在开发一个使用 javax.mail (1.4.7) 通过 SMTP 发送电子邮件的 Java servlet。我的测试位置通过 IPv6 连接到 SMTP 服务器,而我的生产环境是 IPv4。

从 IPv6 环境登录到 SMTP 服务器在(第二个)EHLO 命令(在 STARTTLS 之后)失败。我的理解是,在 IPv6 上下文中,与 EHLO 一起给出的“localhost”名称应该是方括号之间的 IPv6 地址,但在 IPv4 上下文中,应该使用客户端的(完全限定的)主机名。

我检查了我的 Thunderbird 客户端和这个 SMTP 服务器(使用 Wireshark)之间的交换,确实它在 EHLO 之后发送了 IPv6 地址。

然而,java 邮件在 IPv4 和 IPv6 上下文中都在 EHLO 之后发送主机名。在 IPv6 中,这会失败。

两个明显的可用解决方法是: - 设置属性 mail.smtp.ehlo=false - 设置属性 mail.smtp.localhost=[IPv6:xxxx:xxx:xxxx:x:xxxx:xxxx:xxxx:xxxx]

这两种变通方法都是成功的。但是,它们要求我根据 servlet 的运行位置使用不同的设置/配置。

问题; - java 邮件中还不支持 IPv6 EHLO 吗?- 是否有一种优雅的方式来判断连接是 IPv4 还是 IPv6 并相应地调整设置?

标签: javaemailipv6

解决方案


推荐阅读