4

I try to send SMTP email in java, but I have an error like this and I don't get a mail. I turn off all firewall and anti-virus.

The error:

javax.mail.AuthenticationFailedException: 534-5.7.14<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuIW

534-5.7.14 tAxHxbq4WR-vUuV1uOFAvx8NhInfxYTyNHi_8sJ80lX5lBdBla2ROiSKoysMNcFoQ6sGe
534-5.7.14 DUh173tDMolJ64W-Rahx1fhVF_08AvWrphibgQXiyyz5U1FNMMb-eGGJlUIbjyvBgQuZY6

534-5.7.14 tnykIXdVn__mg87aOmtxoss-EiFYeKdvuiBbt5eb9t_NOc97h-PkXOco-9FcYW69Iz9CTu

534-5.7.14 rfyhlo24k9oqIiWtcJwv85oUCO2g> Please log in via your web browser and

534-5.7.14 then try again.

534-5.7.14 Learn more at

534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 pd8sm1306363pdb.93 - gsmtp   

Here is my code:

private void btn_mailActionPerformed(java.awt.event.ActionEvent evt) {                                         

    String to = "[email protected]";

    String from = "[email protected]";
    final String username = "send.address";
    final String password = "sendpassword";
    String host = "smtp.gmail.com";
    Properties pro = new Properties();
    pro.put("mail.smtp.host",host);
    pro.put("mail.smtp.socketFactory.port","465");
     pro.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    pro.put("mail.smtp.auth","true");
     pro.put("mail.smtp.port","465");
    Session session = Session.getInstance(pro,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication()
                {
                    return new PasswordAuthentication(username,password);
                }
            }

            );
    try 
    {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setSubject("test mail");
        message.setText("Hello how are you?");
        Transport.send(message);
        JOptionPane.showMessageDialog(null,"Send");

    } 
    catch (Exception e) {
        JOptionPane.showMessageDialog(null,e.toString());
        System.out.println(e.toString());
    }
2

2 Answers 2

14

Login to email from browser and go this page. You will see this;

enter image description here

Make sure to click "Turn on" and try your code again.

Sign up to request clarification or add additional context in comments.

4 Comments

Thank you. I had to turn it off but it still notice that error.
You want to turn it on, not off. Is your application running on the same machine as the browser you're using?
I try both turn on and turn off. Yes, my application running on same machine as the browser I am using. I think the code is correct, but gmal is not allow send email like this.
@nistelrooy41001662 i guess this should be accepted as the answer!
2

I had the same issue. After much testing with Gmail, I discovered the issue is that Gmail requires an OAuth sign-in, and not just a password. The solution for this is to use the Gmail API. However, this is a very complicated solution that I won't go into too much detail about. If you are interested in this, read the first answer here.

If you want a simple solution, however, what I did is simply switch to a Yahoo account. Because Yahoo doesn't use the same encryption, it works perfectly. Note: Don't forget to change the SMTP server to 'smtp.mail.yahoo.com', and the port to '25'.

If you want to set it up from scratch, simply follow this tutorial to download the JavaMail API and Java Activation Framework.

Then you could just copy-and-paste my code, change the top variables, and everything should work! If I missed anything, please let me know! Thanks!

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

public class Mailer {

    public static void main(String[] args) {
        final String username = "[email protected]";
        final String password = "your-password";
        final String recipient = "email-recipient";
        final String subject = "message-subject";
        final String emailmessage = "message";

        Properties props = new Properties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.mail.yahoo.com");
        props.put("mail.smtp.port", "25");

        Session session = Session.getInstance(props,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
          });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO,    InternetAddress.parse(recipient));
            message.setSubject(subject);
            message.setText(emailmessage);

            Transport.send(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }

    }

}

3 Comments

What you're saying may be correct for specifically Java, but I'm not sure, because on other platforms, Google doesn't require OAuth for using their SMTP.
Well, if you wish to use Google, supposedly you can turn on access for less secure apps, but I couldn't get it to work for me. That is why I used Yahoo instead. Anyway, I haven't heard of OAuth not being required for certain things. Maybe it's just with Java
@user4775991 I doubt if the above code snippet works now with Yahoo's double sign on authentication

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.