javax.mail.AuthenticationFailedException is thrown while sending email in java

Java

Java Problem Overview


I am beginner in java and I want to send an email in java, for that I am using this code in Java. But my code is throwing an exception, and I need a heads-up why…

This is stack trace of exception:

javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsNX
534-5.7.14 No6jJbDc4l7fZ_WLdBD0sNHIIp_nLvplRMm0bYFBnZBF_XOyVvNSdd1FenDZJPwBTFQyRH
534-5.7.14 lriPK3myMm-dXkW3zK0-6XpO7BzI8hfRcByG1k7YiVzXlddTvs7QhjtgCWNcrzMBuPhoof
534-5.7.14 GjME2TgYzXJVHz5MV98nRnr_kq-kP7RmgOtX3IQHLwM5E8QGBC9-2THVQr_Ch_U0-1nZsc
534-5.7.14 yoPuNEw> Please log in via your web browser and then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 wr6sm26888533wjc.24 - gsmtp

	at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:892)
	at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:814)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:728)
	at javax.mail.Service.connect(Service.java:364)
	at javax.mail.Service.connect(Service.java:245)
	at SendEmail.sendFromGMail(SendEmail.java:50)
	at SendEmail.main(SendEmail.java:18)
sent

This is my code

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendEmail {

    private static String USER_NAME = "me";
    private static String PASSWORD = "xyz";
    private static String RECIPIENT = "[email protected]";

    public static void main(String[] args) {
        String from = USER_NAME;
        String pass = PASSWORD;
        String[] to = { RECIPIENT };
        String subject = "Java send mail example";
        String body = "Welcome to JavaMail!";

        sendFromGMail(from, pass, to, subject, body);
        System.out.println("sent");
    }

    private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
        Properties props = System.getProperties();
        String host = "smtp.gmail.com";
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", from);
        props.put("mail.smtp.password", pass);
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props);
        MimeMessage message = new MimeMessage(session);

        try {
            message.setFrom(new InternetAddress(from));
            InternetAddress[] toAddress = new InternetAddress[to.length];

            for( int i = 0; i < to.length; i++ ) {
                toAddress[i] = new InternetAddress(to[i]);
            }

            for( int i = 0; i < toAddress.length; i++) {
                message.addRecipient(Message.RecipientType.TO, toAddress[i]);
            }

            message.setSubject(subject);
            message.setText(body);
            Transport transport = session.getTransport("smtp");
            transport.connect(host, from, pass);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        }
        catch (AddressException ae) {
            ae.printStackTrace();
        }
        catch (MessagingException me) {
            me.printStackTrace();
        }
    }
}

Java Solutions


Solution 1 - Java

I had the same problem! Google prevents access for less secure apps.

This is how I solved it:

Solution 2 - Java

  1. Make sure Less secure apps is TURNED ON https://www.google.com/settings/security/lesssecureapps enter image description here
  2. Allow each app to send email Go to https://accounts.google.com/b/0/DisplayUnlockCaptcha and click on Continue. enter image description here
    enter image description here
  3. This time: you can use your app to send email and all operations are allowed.

More links:
https://support.google.com/accounts/answer/6010255 https://productforums.google.com/forum/#!topic/gmail/9KCgzXY4G_c

Solution 3 - Java

  1. allow less secure apps from your google account settings https://www.google.com/settings/security/lesssecureapps
  2. open your gmail> goto settings > IMAP/POP settings > enable IMAP
  3. goto this url and turn this on (completing all these steps will surely work) https://www.google.com/accounts/DisplayUnlockCaptcha

official guide for help

https://support.google.com/mail/answer/7126229?hl=en-GB&visit_id=637246238859828954-474780158&rd=2

Solution 4 - Java

I am also facing same problem.

Google does't give you direct open port access. If you are using your your google account for mail sending please Turn on the setting by clicking on this link. google go here : https://www.google.com/settings/security/lesssecureapps Best of luck hope it will work for you as well.

Solution 5 - Java

Its not just about enabling the "less secure apps" from google admin page.

The above fix did not solve the issue for me. I contacted google and they asked me to add couple of TXT records to my DNS list. You will need a DKIM key that you will need to generate from the G Suite admin settings for gmail.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMahira KhanView Question on Stackoverflow
Solution 1 - JavaSazibView Answer on Stackoverflow
Solution 2 - JavabiniamView Answer on Stackoverflow
Solution 3 - JavaSuperUser SudoView Answer on Stackoverflow
Solution 4 - JavaSarfraz KhanView Answer on Stackoverflow
Solution 5 - JavaSrini KancharlaView Answer on Stackoverflow