JavaMail API : Username and Password not accepted (Gmail)

authenticationgmailjakarta-mailjava

I want to send email from my java application to gmail account I used the following code and javaMail API ,But Gmail not accepted username and password and exception thrown
Can anybody help me how can I fix this issue?

MailService.java

public class MailService {

    String email;
    String content;
    public void sendMail(String email,String content)
    {
        this.email=email;
        this.content=content;
        // Recipient's email ID needs to be mentioned.
          String to = email;

          // Sender's email ID needs to be mentioned
          String from = senderemail@gmail.com;
          final String username = "myusername";//change accordingly
          final String password = "*******";//change accordingly

          // Assuming you are sending email through relay.jangosmtp.net
          String host = "smtp.gmail.com";

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

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

          try {
           // Create a default MimeMessage object.
           Message message = new MimeMessage(session);

           // Set From: header field of the header.
           message.setFrom(new InternetAddress(from));

           // Set To: header field of the header.
           message.setRecipients(Message.RecipientType.TO,
                   InternetAddress.parse(to));

           // Set Subject: header field
           message.setSubject("Did you get my message?");

           // Now set the actual message
           message.setText(content);

           // Send message
           Transport.send(message);

           System.out.println("Sent message successfully....");

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

Best Answer

To be able send mail messages via your gmail account, you should allow unsecure applications (which your application is by gmail's point of view) in google account security settings. enter image description here

UPD: Also, if you want to see debug messages, use next java mail property:

props.put("mail.debug", "true");

It can help you to find out what happening behind the scenes.