【问题标题】:JavaMail and IP4 vs IP6JavaMail 和 IP4 与 IP6
【发布时间】:2013-11-29 19:17:57
【问题描述】:

我通过 JavaMail 将邮件发送到本地主机上的邮件服务器,端口 25。 我的邮件服务器仅绑定到 IP4,即绑定到 127.0.0.1:25,但不绑定到 [::]:25

对于 JavaMail 2.5.1 和 JDK 1.7.0_45,我只能在设置系统属性 java.net.preferIPv4Stack=true 时才能使用它。

问题:

  1. 为什么需要设置系统属性?我的意思是为什么不是 在 JavaMail 中足以将我的目标主机设置为 127.0.0.1 而不是 比localhost。我会假设使用显式 IP4 地址 足以告诉 Java 我想使用 IP4 连接?

  2. 好的,假设我真的需要那个系统属性。我在 J2EE 中 服务器,我真的不想惹上其他租户 相同的 J2EE 服务器。如果我在我的代码中以编程方式设置它,如 System.setProperty("java.net.preferIPv4Stack","true") 会不会影响J2EE服务器中的其他租户?

  3. 我真正想做的是确保只有那个 SMTP 连接使用 IP4。在应用程序中,还有许多与 SMTP 无关的其他 TCP 连接正在进行。我不想限制那些只使用 IP4。有什么方法可以实现吗?

格雷西。

【问题讨论】:

    标签: java sockets jakarta-mail


    【解决方案1】:

    我会回答我自己的问题。

    问题是使用属性mail.smtp.host=127.0.0.1 并没有像我预期的那样强制使用IP4。

    诀窍是同时使用属性mail.smtp.localaddress=127.0.0.1。这会将传出套接字绑定到此本地地址,从而使其成为 IP4。

    JavaMail 中 SMTP 连接的属性记录在 here

    我假设这个问题也可以通过创建一个自定义的 SocketFactory 类来解决,然后让 JavaMail 知道应该通过mail.smtp.socketFactory.class 属性来使用这个类。

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 2018-12-03
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2011-09-21
      • 1970-01-01
      相关资源
      最近更新 更多