JavaMail和IP4与IP6

时间:2013-11-29 08:37:58

标签: java sockets javamail

我通过JavaMail将邮件发送到localhost,端口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.1localhost。我假设使用显式IP4地址 足以告诉Java我想要使用IP4 连接

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

  3. 我真正想要做的是确保只有该SMTP连接使用IP4。在应用程序中,有很多其他TCP连接与SMTP无关。我不想限制那些仅使用IP4。有没有办法实现这个目标?

  4. 感恩教堂。

1 个答案:

答案 0 :(得分:0)

我会回答我自己的问题。

问题是使用属性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属性使用此类。< / p>