smtpjakarta-mailcentos7unknown-hostaruba

java.net.UnknownHostException: smtps.aruba.it


I'm using javax.mail with a mail aruba account.

On a windows and a centos7 machine everything works. But on another, specific, centos7 machine (under aruba server) tomcat7's console says:

enter image description here

I saw every posts that google and stackoverflow suggests to me, but nothing worked.

I think it's a machine enviroment problem.

Mail class

import java.io.IOException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.mail.MailSender;
import org.springframework.stereotype.Service;
     @Service("mailSender")
    public class ApplicationMailer {

        private static javax.mail.Session session=null; 
        private static Resource resource = new ClassPathResou

rce("resources/mail.properties");

    static {
        try {
            final Properties props = PropertiesLoaderUtils.loadProperties(resource);
            if (props!=null)
            {
                session = javax.mail.Session
                    .getInstance(props, new javax.mail.Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(props.getProperty("email.username"),
                                    props.getProperty("email.password"));
                        }

                    });
            }
        } catch (IOException e) {
            session=null;
            e.printStackTrace();
        }
    }


    @Autowired
    private MailSender mailSender;


    public MailSender getMailSender() {
        return mailSender;
    }

    public void setMailSender(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    /**
     * This method will send compose and send the message 
     * @throws IOException 
     * @throws MessagingException 
     * @throws AddressException 
     * */
    public void sendMail(String to, String subject, String body) throws IOException, AddressException, MessagingException{
            Message mail = new MimeMessage(session);
            final Properties props = PropertiesLoaderUtils.loadProperties(resource);
            mail.setFrom(new InternetAddress(props.getProperty("mail.from")));
            mail.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            mail.setSubject(subject);
            mail.setContent(body, "text/html");
            Transport.send(mail); 

    }
}

mail.properties

mail.debug=true
mail.from=*****
email.username=******
email.password=******

mail.smtp.host=smtps.aruba.it
mail.smtp.port=465
mail.smtp.localhost=localhost
mail.mime.charset=UTF-8
mail.smtp.auth=true

mail.smtp.ssl.enable=true
mail.transport.protocol=smtps

dispacer servlet

  <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="smtps.aruba.it" />
        <property name="port" value="465" />
        <property name="protocol" value="smtps" />
        <property name="username" value="*****" />
        <property name="password" value="*****" />
        <property name="javaMailProperties">
            <props>
                <prop key="mail.transport.protocol">smtps</prop>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.debug">true</prop>
                <prop key="mail.smtp.localhost">localhost</prop>
                <prop key="mail.mime.charset">UTF-8</prop>
<!--                <prop key="mail.smtps.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> -->
                <prop key="mail.smtps.ssl.enable">false</prop>
            </props>
        </property>
    </bean>

Solution

  • The error message is quite clear. An UnknownHostException is thrown if the server name can't be resolved to an IP-address. This is most likely not a Java- or JavaMail issue but one concerning the configuration of the underlying operating system.

    To be sure you can open a shell session and type one of the following

    host smtps.aruba.it

    dig smtps.aruba.it

    nslookup smtps.aruba.it

    (dependent on what's installed, one or more commands might not exist)

    If the answer is that the host is not known, you can stop troubleshooting your java application ;-)