Mail Sending fails with SMTP fails to connect

▼魔方 西西 提交于 2019-12-13 18:41:03

问题


I am trying to send a mail using the below program but I am getting the following error message.

             public class SMTPTest {
    //private Logger log = Logger.getLogger(this.getClass());

    public boolean sendSimpleMail(String to, String subject, String body) {
        Properties props = new Properties();
        props.put("mail.smtp.user", "amrita_test");
        props.put("mail.smtp.password", "aview");
        props.put("mail.smtp.host", "192.168.0.25");
        props.put("mail.smtp.port", "25");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        // props.put("mail.smtp.debug", "true");
        props.put("mail.smtp.debug", "false");
        props.put("mail.smtp.socketFactory.port", "425");
        props.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        try {
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            // session.setDebug(true);
            MimeMessage msg = new MimeMessage(session);
            String content = body;
            msg.setSubject(subject);
            msg.setFrom(new InternetAddress("buddhiedge@gmail.com"));
            Address[] addresses = new Address[1];
            addresses[0] = new InternetAddress("buddhiedge@gmail.com");
            msg.setReplyTo(addresses);
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            msg.setContent(content, "text/html");
            Transport.send(msg);
            return true;
        } catch (Exception mex) {
            mex.printStackTrace();
            System.out.println("Error in sending mail :: " + mex.getMessage());
            return false;
        }
    }

    private class SMTPAuthenticator extends Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("amrita_test",
                    "aview");
        }
    }
    public static void main(String args[]){
        SMTPTest test=new SMTPTest();
        test.sendSimpleMail("praveenpkd@gmail.com", "subject", "body");
    }
}

Error is: javax.mail.MessagingException: Could not connect to SMTP host: 192.168.0.25, port: 25;

    nested exception is:
    java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
    at javax.mail.Service.connect(Service.java:297)
    at javax.mail.Service.connect(Service.java:156)
    at javax.mail.Service.connect(Service.java:105)
    at javax.mail.Transport.send0(Transport.java:168)
    at javax.mail.Transport.send(Transport.java:98)
    at SMTPTest.sendSimpleMail(SMTPTest.java:45)
    at SMTPTest.main(SMTPTest.java:62)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
    ... 8 more

But the There is no problem with SMTP Server or connection. telnet 192.168.0.25 25 connects fine. How to solve this.


回答1:


Please try to send mail again by removing only the following from your code.

    props.put("mail.smtp.socketFactory.port", "425");
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

Normally, the exception

java.net.ConnectException: Connection timed out

is caused only if the java mail is not able to connect to the mentioned server in the specified port. The most probable cause would be that java mail tries to connect to the 425 port specified in your session properties.




回答2:


If it was an authentication issue, I believe you would get a different error.

Does your network/SMTP server support IP6? If your client has IP6 support, later versions of Java default to IP6, but many SMTP servers are configured on IP4. See this article here Sending email using JSP for directions on conguring your JVM to force IP4. This needs to be set on the JVM as it is instantiated.



来源:https://stackoverflow.com/questions/16415222/mail-sending-fails-with-smtp-fails-to-connect

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!