javamail und filterung bekannter nachrichten

  • Themenstarter Themenstarter shift42
  • Beginndatum Beginndatum
S

shift42

Gast
kann ich javamail dazu anweisen nur bestimmte nachrichten herunterzuladen (z.b. alle die nach einem bestimmten zeitpunkt empfangen wurden). oder nur die header runterzuladen und diese filterung ggf selbst durchzuführen?

ich möchte vermeiden, daß bereits heruntergeladene emails nicht noch einmal heruntergeladen werden (wenn die mails auf dem server bleiben und dort nicht gelöscht werden).

bisher mache ich das so:

Java:
class MailAuthenticator extends Authenticator {

    @Override
    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("USER", "PASSWORD");
    }

	public static void main(String[] args) {
        try {
            Properties properties = new Properties();

            properties.put("mail.pop3.starttls.enable", "true");

            Session session = Session.getInstance(properties, new MailAuthenticator());
            Store store = session.getStore("pop3");
            store.connect("SERVER", null, null);

            Folder inbox = store.getFolder("INBOX");

            inbox.open(Folder.READ_ONLY);

            Message[] messages = inbox.getMessages();

            for (Message message : messages) {
                // header und content auslesen
            }

            inbox.close(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}
 
Hallo shift42,
bei POP3 besteht die Möglichkeit alle UIDs der auf dem Server befindlichen Mails abzurufen ohne dass die Mails komplett abgerufen werden. Hier ein Auszug aus der JavaMail Api Documentation:
The POP3 provider supports the POP3 UIDL command, see POP3Folder.getUID(). You can use it as follows:

if (folder instanceof com.sun.mail.pop3.POP3Folder) {
com.sun.mail.pop3.POP3Folder pf =
(com.sun.mail.pop3.POP3Folder)folder;
String uid = pf.getUID(msg);
if (uid != null)
... // use it
}
You can also pre-fetch all the UIDs for all messages like this:

FetchProfile fp = new FetchProfile();
fp.add(UIDFolder.FetchProfileItem.UID);
folder.fetch(folder.getMessages(), fp);
Then use the technique above to get the UID for each message. This is similar to the technique used with the UIDFolder interface supported by IMAP, but note that POP3 UIDs are strings, not integers like IMAP UIDs. See the POP3 spec for details.
 
Also die angezeigten Sourcen holen noch keine Nachrichten. Hier sind bisher nur Referenzen vorhanden. Die Daten, die Du zu jeder Mail holst, die holst Du erst durch die einzelnen get-Methoden.
Das Problem ist, dass Du zuerst am Besten ein fetch auf die Daten machst, die Du anzeigen möchtest.

Dafür solltest Du die Klasse FetchProfile nutzen.
FetchProfile (JavaMail API documentation)
 

Zurück
Oben