Gmail JavaMail сообщение проблема исправления - PullRequest
0 голосов
/ 09 июля 2010

Я работаю над проектом с использованием JavaMail.Я хочу получить доступ к своему почтовому ящику Gmail и получать сообщения.Я ищу конкретное сообщение, проверяя тему.Это сообщение имеет вложение, которое я сохраняю. Программа отлично работает при первом запуске.Проблема в том, что после запуска программы при любых последующих запусках сообщение не отображается.Он не отображается как часть сообщений папки.Если я захожу в учетную запись gmail и устанавливаю «Включить POP для всей почты (даже почты, которая уже была загружена)» (которая была настройкой с самого начала), я вижу сообщение еще раз, прежде чем оно снова перестает появляться в папке.Я не понимаю, любая помощь будет большой.

Вот мой код, который получает сообщения:

    Session session2 = Session.getDefaultInstance(props2, null);
    Store store = session2.getStore("pop3s");
    store.connect(getHost, username, password);
    Folder folder = store.getFolder("INBOX");
    folder.open(Folder.READ_ONLY);
    System.out.println(folder.getMessageCount());
    Message messages[] = folder.getMessages();
    for (Message message : messages) {
        System.out.println(message.getSubject());
        if (message.getSubject().equalsIgnoreCase("Input File")) {
            if (message.getContent() instanceof Multipart) {
                Multipart multipart = (Multipart) message.getContent();
                for (int i = 0, n = multipart.getCount(); i < n; i++) {
                    Part part = multipart.getBodyPart(i);
                    String disposition = part.getDisposition();
                    if ((disposition != null) && ((disposition.equals(Part.ATTACHMENT) || (disposition.equals(Part.INLINE))))) {
                        File f = saveFile(part.getFileName(), part.getInputStream());
                        System.out.println(f.getPath());
                    }
                }
            }
        }
    }
    folder.close(false);
    store.close();
}

Метод saveFile:

public static File saveFile(String filename, InputStream input) throws FileNotFoundException, IOException {
    File file = new File(filename);
    for (int i = 0; file.exists(); i++) {
        file = new File(filename + i);
    }
    FileOutputStream fos = new FileOutputStream(file);
    BufferedOutputStream bos = new BufferedOutputStream(fos);

    BufferedInputStream bis = new BufferedInputStream(input);
    int aByte;
    while ((aByte = bis.read()) != -1) {
        bos.write(aByte);
    }
    bos.flush();
    bos.close();
    bis.close();
    return file;
}

Ответы [ 2 ]

1 голос
/ 15 декабря 2012

Код почти правильный, и он мне очень помог.Part.Attachment ="attachment" но String disposition = "ATTACHMENT"

Заменить только деталь

 if ((disposition != null) && ((disposition.equals(Part.ATTACHMENT) || (disposition.equals(Part.INLINE))))) {
        File f = saveFile(part.getFileName(), part.getInputStream());
        System.out.println(f.getPath());
    }

на

if ((disposition != null) && ((disposition.toLowaerCase().equals(Part.ATTACHMENT) || (disposition.equals(Part.INLINE))))) {
        File f = saveFile(part.getFileName(), part.getInputStream());
        System.out.println(f.getPath());
    }
1 голос
/ 10 июля 2010

Я попытался переключить свой код на использование imap, и теперь, похоже, он работает. Я полагаю, что моя проблема связана с pop3 и gmail.

...