Recently I stumbled upon a weird problem while debugging a simple java application that needed to send an email
Since I was debbuging this application locally I used the FakeSMTP tool that I described in this tutorial here : Testing email sending functionality with FakeSMTP which I run locally on my machine
So after editing the configuration on my Java program and firing up the SMTP server I was quite surprised to get the following exception :
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25 (java.net.SocketException: Network is unreachable: connect) System.setProperty("java.net.preferIPv4Stack" , "true");
So once you are sure you problem is not coming from a non running SMTP server or a network connection, you can check if the culprit is no other than Java
If you read the Oracle documentation here you will see that by default Java prefers IPv6 to IPv4 which is the problem in our case since FakeSMTP binds on IPv4
Luckily there is a way to force Java to prefer IPv4 over IPv6 using the system property java.net.preferIPv4Stack
This can either be done :
- programmatically
- using java options
1. Programmatically
System.setProperty("java.net.preferIPv4Stack" , "true");
2. Using java options
java -jar myJar.jar -Djava.net.preferIPv4Stack=true
That should take care of the problem
Another solution would be to disable IPv6 networking on your machine but that may have other side effects on your system..