Подсчет количества писем в почтовом ящике Gmail - PullRequest
4 голосов
/ 24 июля 2011

Это код, который подсчитывает количество писем в папке gmail.

Properties props = new Properties();
    props.put("mail.pop3.host" , "pop.gmail.com");
    props.put("mail.pop3.user" , "username");
    props.put("mail.pop3.socketFactory" , 995 );
    props.put("mail.pop3.socketFactory.class" , "javax.net.ssl.SSLSocketFactory" );
    props.put("mail.pop3.port" , 995);
    Session session = Session.getDefaultInstance(props , new Authenticator() {
        @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication( "username" , "password");
                }
    });
    try {
        Store store  = session.getStore("pop3");
        store.connect("pop.gmail.com" , "username" , "password");
        Folder fldr = store.getFolder("INBOX");
        fldr.open(Folder.HOLDS_MESSAGES);
        int count = fldr.getMessageCount();
        System.out.println(count);
    } catch(Exception exc) {
        System.out.println(exc + " error");
    }

Я получаю счет, равный 7, но я должен получить 3, потому что у меня есть только 3 сообщения в папке "Входящие".

Ответы [ 3 ]

2 голосов
/ 24 июля 2011

Для этого используется протокол IMAP.

Properties props = new Properties();
    props.put("mail.imap.host" , "imap.gmail.com");
    props.put("mail.imap.user" , "username");
    props.put("mail.imap.socketFactory" , 993 );
    props.put("mail.imap.socketFactory.class" , "javax.net.ssl.SSLSocketFactory" );
    props.put("mail.imap.port" , 993);
    Session session = Session.getDefaultInstance(props , new Authenticator() {
        @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication( "username" , "password");
                }
    });
    try {
        Store store  = session.getStore("imap");
        store.connect("imap.gmail.com" , "username" , "password");
        Folder fldr = store.getFolder("Inbox");
        fldr.open(Folder.HOLDS_MESSAGES);
        int count = fldr.getMessageCount();
        System.out.println(count);
    } catch(Exception exc) {
        System.out.println(exc + "error");
    }
2 голосов
/ 24 июля 2011

В настройках GMAIL POP3 вы должны разрешить доступ по протоколу POP только для писем, полученных с текущего момента, это стандартное поведение GMAIL.

Когда вы включаете POP, все сообщения загружаются на ваш клиент, кромедля спама, мусора и чатов.Если вы не хотите, чтобы сообщения, отправляемые из веб-интерфейса, загружались в почтовый ящик вашего почтового клиента, мы рекомендуем создать фильтр в вашем клиенте.Вы можете обратиться в отдел обслуживания клиентов своего почтового клиента за инструкциями по классификации загружаемых сообщений.

См. Статью об устранении неполадок GMAIL

Выборочная синхронизация AFAIK вGMAIL возможен только с протоколом IMAP.

0 голосов
/ 15 сентября 2012

Вот пример чтения электронных писем из входящих сообщений.

http://bharatonjava.wordpress.com/2012/09/15/read-emails-form-inbox/

вот фрагмент кода

public static void main(String[] args){
    Properties props = new Properties();
    try {
        props.load(new FileInputStream(new File("settings.properties")));
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }

Session session = Session.getDefaultInstance(props, null);

Store store = session.getStore("imaps");
store.connect("smtp.gmail.com", "yourEmailId@gmail.com",
                    "put your password here");

Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_WRITE); // Folder.READ_ONLY
int messageCount = inbox.getMessageCount();
System.out.println("Total Messages" + messageCount);
}

Вы должны сохранить настройки электронной почты в файле свойств с именем settings.properties, как показано ниже.

mail.smtp.host=smtp.gmail.com
mail.smtp.socketFactory.port=465
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.auth=true
mail.smtp.port=465
...