我通过JavaMail将邮件发送到localhost,端口25上的邮件服务器。
我的邮件服务器仅绑定到IP4,即绑定到127.0.0.1:25
,但不绑定到[::]:25
。
使用JavaMail 2.5.1和JDK 1.7.0_45我只能在设置系统属性java.net.preferIPv4Stack=true
时才能使用它。
问题:
为什么我需要设置系统属性?我的意思是为什么不是
在JavaMail中足够将我的目标主机设置为127.0.0.1
比localhost
。我假设使用显式IP4地址
足以告诉Java我想要使用IP4
连接
好的,我想我真的需要那个系统属性。我在J2EE里面
服务器,我真的不想与其他租户混淆
相同的J2EE服务器。如果我在我的代码中以编程方式设置它,就像在
System.setProperty("java.net.preferIPv4Stack","true")
它会影响J2EE服务器中的其他租户吗?
我真正想要做的是确保只有该SMTP连接使用IP4。在应用程序中,有很多其他TCP连接与SMTP无关。我不想限制那些仅使用IP4。有没有办法实现这个目标?
感恩教堂。
答案 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>