java - 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 并相应地调整设置?
解决方案
推荐阅读
- python - PYTHON 错误:TypeError:“模块”对象不可调用
- python - 如何计算两个日期之间的差异,动态拆分它们?Python
- javascript - 角 10 | 打字稿 | 在更改事件中分配的变量未定义
- android - 我如何使用 android nav 组件解决片段中的错误
- javascript - NodeJS - 如何将脚本节点插入 HTML 文档的开头?
- r - 如何在 R 中对另一个数据框的日期重新采样数据
- google-analytics - 为什么 GA 不从搜索广告中读取“中等”UTM 参数?
- r - 空白列以宽格式分隔两个变量
- r - 在 DFM 中仅保留每个唯一标签的最高频率项
- mongodb - MongoDb 聚合查询:为每个数组计算嵌套对象的属性数