2013-11-29 1 views
1

Я отправляю почту через JavaMail к почтовому серверу на локальном хосте, порт 25. Мой почтовый_сервер связывается с IP4 только, т.е. он связывается с 127.0.0.1:25, но не [::]:25.JavaMail и IP4 против IP6

С 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. В приложении есть много других TCP-соединений, которые не связаны с SMTP. Я не хочу ограничивать использование IP4. Есть ли способ, которым я могу это достичь?

Grazie.

ответ

0

Я отвечу на свой вопрос.

Проблема в том, что использование свойства mail.smtp.host=127.0.0.1 не заставляет использовать IP4, как я и ожидал.

Хитрость заключается в использовании имущества mail.smtp.localaddress=127.0.0.1. Это свяжет исходящий сокет с этим локальным адресом и, таким образом, сделает его IP4.

Свойства для SMTP-соединения в JavaMail документированы here.

Я предполагаю, что проблема может быть решена путем создания пользовательского SocketFactory класса, а затем пусть JavaMail знать, что этот класс должен использоваться путями mail.smtp.socketFactory.class имущества.

Смежные вопросы