How javax.mail.AuthenticationFailedException: failed to connect in sending mail by java?

iamatsundere181 picture iamatsundere181 · Jun 21, 2016 · Viewed 8.4k times · Source

I am making an web app that can send an email, in this code I used yahoo mail to send.

I tried some solutions but they did not have me much:

  1. Getting the "javax.mail.AuthenticationFailedException: failed to connect" Error
  2. javax.mail.AuthenticationFailedException: failed to connect, no password specified?

Here is my code:

try {

        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.mail.yahoo.com"); // for gmail use smtp.gmail.com
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() {

            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("[email protected]", "my_pwd");
            }
        });

        mailSession.setDebug(true); // Enable the debug mode

        Message msg = new MimeMessage(mailSession);

        //--[ Set the FROM, TO, DATE and SUBJECT fields
        msg.setFrom(new InternetAddress("[email protected]"));
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("other@mail"));
        msg.setSentDate(new Date());
        msg.setSubject("Hello World!");

        //--[ Create the body of the mail
        msg.setText("Hello from my first e-mail sent with JavaMail");

        //--[ Ask the Transport class to send our mail message
        Transport.send(msg);
        return true;

    } catch (Exception E) {
        System.out.println("Oops something has gone pearshaped!");
        System.out.println(E);
        return false;
    }

And here is the debug code:

DEBUG: JavaMail version 1.4.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: setDebug: JavaMail version 1.4.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.mail.yahoo.com", port 465, isSSL false
220 smtp.mail.yahoo.com ESMTP ready
DEBUG SMTP: connected to host "smtp.mail.yahoo.com", port: 465

EHLO DESKTOP-132ABCD
250-smtp.mail.yahoo.com
250-PIPELINING
250-SIZE 41697280
250-8 BITMIME
250 AUTH PLAIN LOGIN XOAUTH2 XYMCOOKIE
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "41697280"
DEBUG SMTP: Found extension "8", arg "BITMIME"
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN XOAUTH2 XYMCOOKIE"
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 
AUTH LOGIN
//some code
535 5.7.0 (#MBR1240) Please verify your account by going to https://login.yahoo.com
Oops something has gone pearshaped!
javax.mail.AuthenticationFailedException: failed to connect

Please help me, thank you so much!

Answer

sawyinwaimon picture sawyinwaimon · Jun 21, 2016

I used your java code to send email instead I used my gmail account. At first attempt, I also got "javax.mail.AuthenticationFailedException: 534-5.7.14".

This exception happens because google turns off access for less secure apps. After that I went to this link.

After following instructions and turning on less secure apps I was able to send mail.

Since you are using yahoo mail you can try this link to turn on access for less secure app by enabling option "Allow apps that use less secure sign in".