69

I am getting this error when I try to send mail using the JavaMail API:

javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted

How can I fix this?

ElliotSchmelliot
  • 7,322
  • 4
  • 41
  • 64
Rohit Raj
  • 801
  • 1
  • 6
  • 4

17 Answers17

114

Sorry for coming late to Party.These could be the problem in your task if you are using Gmail Server.

  1. Two Step Verification should be turned off.
  2. Allow Less Secure App(should be turned on).
  3. Please Check Your UserName and Password.
  4. Check the code(which was my Problem), Above three You can change form google help center and by Yourself last one My Experience I can Share with You. You need to Authenticate the Mail server before Communicating the message because it is Challenge Response System By which You are Communicating through the mail.I am sharing code snippets file you can refer not able to format my code by ctrl+K.
ThinkTank
  • 1,737
  • 5
  • 22
  • 36
  • It is better if you can add your solution also here – Dinidu Hewage Jul 20 '17 at 11:16
  • Yes I tried it but due to some issue which I cannot identify right now I have added it to Google drive – ThinkTank Jul 20 '17 at 11:25
  • 21
    Allow Less Secure Apps is the most common problem here – norbertas.gaulia Feb 11 '19 at 13:25
  • 9
    Turning ON `Allow Less Secure Apps` was simply the solution in my case – SourceVisor Apr 19 '19 at 12:53
  • 1
    To speed up the diagnosis, send to yourself and *check the inbox*. If point 2. - a *non-Google sender app* (like JavaMail invoked by Jenkins mailer in my case) is the reason, you will see a mail from Google saying `"Someone just used your password to try to sign in to your account from a non-Google app. Google blocked them, but you should check what happened. Review your account activity to make sure no one else has access."` – mirekphd Dec 08 '19 at 11:42
  • 4
    Works like a charm. The most common problem here is "Allow Less Secure App" setting since it is turned off for all Google accounts by default. – Abhijay Kumar Jul 13 '20 at 11:02
  • 5
    2nd works for me. Google will automatically turn this setting OFF if it’s not being used – c.sankhala Oct 14 '20 at 11:37
57

This worked for me:

  1. Login to the gmail account you are sending mail from
  2. Go to Manage your Google Account -> Security -> Less secure app access -> Turn on access (not recommended)
    or
    Access the URL:
    https://www.google.com/settings/security/lesssecureapps
  3. Turn "Allow less secure apps: OFF" to "Allow less secure apps: ON"

Update: Google stopped supporting "Less Secure Apps" as of May 30th, 2022.

One of the alternatives to solve this problem is to use 2-Step Verification and generate app password:

  1. Google Account -> Security -> 2-Step Verification -> Input password as asked -> Turn ON (you could use SMS to get Gmail code to activate 2-Step Verification)
  2. Google Account -> Security -> App password -> Input password as asked -> Select the app and device... -> e.g. Other(Custom name) -> Input app name e.g. MyApp -> Generate
  3. Copy a 16-character password
  4. Use a 16-character password with Gmail username in your application

Google support link here.

ognjenkl
  • 1,407
  • 15
  • 11
37

Update since June 2022: Google closed the "Less secure app access", but opened another option called "App Passwords":

"When you use 2-Step Verification, some less secure apps or devices may be blocked from accessing your Google Account. App Passwords are a way to let the blocked app or device access your Google Account." (see docs).

Follow this answer to set up App Passwords

Hint: when using Jenkins Email Extension Plugin, emailext (which does not permit tokens like Google's App Passwords, still requiring logins), just use App Password as the password, and supply any string as login, e.g. your Gmail address login.


OLD ANSWER , not relevant anymore

Step 1: Log into your gmail account

Step 2: Click Settings

enter image description here

Step 3: Click the Accounts and Import Tab > Other Google Account Settings

enter image description here

Step 4: Click Security

  • Scroll to the bottom of the page Under Less secure app access, click on Turn on access

enter image description here

Step 5: Set Allow less secure apps to ON

enter image description here

mirekphd
  • 4,799
  • 3
  • 38
  • 59
Vladi
  • 1,662
  • 19
  • 30
8
  1. First of all make sure that all properties should be defined as follows:-

mail.smtp.host=smtp.gmail.com, mail.smtp.port=25, mail.smtp.auth=true mail.smtp.starttls.enable=true

  1. Now,make sure that two step verification is off

  2. Allow less secure app (ON) follow this link :-

https://myaccount.google.com/lesssecureapps

  1. Also, check your username and password is correct or not.
user3769960
  • 91
  • 1
  • 5
8

It works for me, you must configure your Gmail account with the below steps:

In the security section:

You need to Change "Allow less secure apps: OFF" to "Allow less secure apps: ON"

somshivam
  • 759
  • 7
  • 19
Y.LAGHOUAZI
  • 101
  • 1
  • 4
3

Log on gmail account, in Account ->

click Security -> turn off 2-step verification and turn on "Less secure app access"

May be because of things above, hope help you

slfan
  • 8,950
  • 115
  • 65
  • 78
2

I have the same error but when I run the app from the terminal, it goes away. My email configuration is provided:

spring.mail.host=smtp.googlemail.com
spring.mail.username=weddingcard9999@gmail.com
spring.mail.password=Weddingcard.1
spring.mail.port=587
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.required=true
Arefe
  • 11,321
  • 18
  • 114
  • 168
1

1.Allow Less Secure App(should be turned on).

2.Check Gmail Username and Password..

 public static void main(String[] args) {

        final String username = "YourMailId";
        final String password = "password";

        Properties prop = new Properties();
        prop.put("mail.smtp.host", "smtp.gmail.com");
        prop.put("mail.smtp.port", "587");
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.starttls.enable", "true"); //TLS

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

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("Tarunsunny143@gmail.com"));
            message.setRecipients(
                    Message.RecipientType.TO,
                    InternetAddress.parse("balachandralucky2@gmail.com, to_username_b@yahoo.com")
            );
            message.setSubject("Testing Gmail TLS");
            message.setText("Dear Mail Crawler,"
                    + "\n\n Please do not spam my email!");

            Transport.send(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

}
tarun kumar143
  • 391
  • 4
  • 7
1

Please turn on by clicking the toggle button inside the google security panel. Then it will allow less secured app also.

enter image description here

Ticherhaz FreePalestine
  • 2,738
  • 4
  • 20
  • 46
spain
  • 11
  • 1
1

Change the settings in Google like this:

https://i.stack.imgur.com/DidAj.png

Dave Yarwood
  • 2,866
  • 1
  • 17
  • 29
1

I had this issue while setting up my Jenkins and I resolved it without turning off my Two-Step Verification on my email account security.

This error in my case was because Two-Step Verification was enabled in my email, so I needed to add an app password to generate a password that will give Jenkins access to my mail in order to send emails on my behalf.

STEP 1: Click settings on your email account, select the "Account and Import" tab and in the change account settings, select "Other Google accounts settings" enter image description here

STEP 2: In the settings screen that opens, select "Security" on the left-hand side, and under Signing in to Google, click "App passwords" enter image description here

STEP 3: In the add passwords section, click the select app, and select "Mail" enter image description here

STEP 4: Still in the add passwords, click on the select device and choose "Other (Custome name)". enter image description here

And in the field that will show, enter a custom name for the app you are creating a password for and click the generate button. enter image description here

FINALLY: Copy the generated password and use it as your email password while setting up email sending on Jenkins or any other app you are setting it up on. enter image description here

I just hope this helps someone, give me a vote if it does, Thanks...

Peter Akwa
  • 77
  • 1
  • 6
0

You probably got this error because the username and password of the from mail id is not matching. Please recheck your password and mail-id (username). It could be a typo.

In some cases, Gmail prevents logging in through external applications or programs which are not authorised. Also login to your gmail account to check if gmail has prevented logging in to your account via your Java Mail API program.

If nothing works, you could try some other SMTP server (like yahoo, yandex).

Mathews Mathai
  • 1,707
  • 13
  • 31
0

Follow the steps:

  1. Disable antivirus
  2. Allow Less Secure App On
  3. Two Step Verification should be turned off.
kalehmann
  • 4,821
  • 6
  • 26
  • 36
0

For me works change the property "mail.host" recomended for @Heisenberg.

At documentation says to use "smtp.gmail.com" but works only I use "smtp.googlemail.com".

PS: My Allow Less Secure App configuration was already On

guinogueiras
  • 71
  • 1
  • 5
0

Google stopped supporting "Less Secure Apps" a time ago. I used 2-Step Verification to generate app password and it worked for me:

Go to your Google Account -> Security -> 2-Step Verification Then follow the steps to turn on

After that, go to your Google Account -> Security -> App passwords -> Select the app and device... -> e.g. Other(Custom name) -> Input app name e.g. Linux Computer -> Generate

Then copy the 16 character password shown in the screen and place it in the your applications config:

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=myappemailhere@gmail.com
spring.mail.password=mygeneratedpasswordhere
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
0

A couple of answers have mentioned the Less Secure App setting which google stopped supporting in May 2022. Just wanted to clarify that the May 2022 date concerns gmail accounts. If you use Google Workspace for your email, you can still access and enable the Less Secure App Access setting then proceed to use smtp.gmail.com via port 465 or 587.

The help text accompanying the setting says "Important: This deadline does not apply to Google Workspace or Google Cloud Identity customers. The enforcement date for these customers will be announced on the Workspace blog at a later date".

majjinator
  • 31
  • 3
0

Updated 3 July 2023 Log on gmail account, in Manage your Google Account -> Security

  1. Turn on the 2-Step Verification
  2. Setting the App password

What is an App Password? -> An App Password is a 16-digit passcode that gives a less secure app or device permission to access your Google Account. App Passwords can only be used with accounts that have 2-Step Verification turned on

Turn on the 2-Step Verification

select App password

setting app password I set my app password name [My program] -> generated to get 16 digits

hoapham
  • 180
  • 5
  • 10