-1

I am writing a simple java program which can check my gmail inbox.I followed the tutorials at http://www.tutorialspoint.com/javamail_api/javamail_api_checking_emails.html. But when i try to run this program

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;

public class CheckingMails {

   public static void check(String host, String storeType, String user,
      String password) 
   {
      try {

      //create properties field
      Properties properties = new Properties();

      properties.put("mail.pop3.host", host);
      properties.put("mail.pop3.port", "995");
      properties.put("mail.pop3.starttls.enable", "true");
      Session emailSession = Session.getDefaultInstance(properties);

      //create the POP3 store object and connect with the pop server
      Store store = emailSession.getStore("pop3s");

      store.connect(host, user, password);

      //create the folder object and open it
      Folder emailFolder = store.getFolder("INBOX");
      emailFolder.open(Folder.READ_ONLY);

      // retrieve the messages from the folder in an array and print it
      Message[] messages = emailFolder.getMessages();
      System.out.println("messages.length---" + messages.length);

      for (int i = 0, n = messages.length; i < n; i++) {
         Message message = messages[i];
         System.out.println("---------------------------------");
         System.out.println("Email Number " + (i + 1));
         System.out.println("Subject: " + message.getSubject());
         System.out.println("From: " + message.getFrom()[0]);
         System.out.println("Text: " + message.getContent().toString());

      }

      //close the store and folder objects
      emailFolder.close(false);
      store.close();

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

   public static void main(String[] args) {

      String host = "pop.gmail.com";// change accordingly
      String mailStoreType = "pop3";
      String username = "yourmail@gmail.com";// change accordingly
      String password = "*****";// change accordingly

      check(host, mailStoreType, username, password);

   }

}

I get the following error

javax.mail.AuthenticationFailedException: [AUTH] Web login required: https://support.google.com/mail/bin/answer.py?answer=78754
    at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:209)
    at javax.mail.Service.connect(Service.java:364)
    at javax.mail.Service.connect(Service.java:245)
    at CheckingMails.check(CheckingMails.java:38)
    at CheckingMails.main(CheckingMails.java:78)

But when i enable "Access for less secured apps" in my gmail account,this works perfectly.How do i solve this problem. This question is similar to Can send emails through Gmail account only if account has "Access for less secure apps" enabled but it doesnt have an answer there!

Community
  • 1
  • 1
user3290349
  • 1,227
  • 1
  • 9
  • 17

1 Answers1

0

"Less-secure apps" means connections that do not use OAuth2.
Because they store your password, they're less secure.

You can either switch to AOuth2 or allow that access.

SLaks
  • 868,454
  • 176
  • 1,908
  • 1,964
  • But if i write an application to check the inbox of all mails i have,do i have to change settings of all the mails i am giving in the app?Cant i make any changes in the program so that it will become more secured? – user3290349 Oct 12 '14 at 16:58
  • Yes; switch to IMAP and use OAuth2. – SLaks Oct 12 '14 at 17:05