2010-07-30 21 views
2

Je souhaite créer une application qui récupère tous les messages d'un compte de messagerie à l'aide d'imap. Lorsque je lance l'application pour la première fois, je reçois tous les mails, que si je la relance, je veux marquer les messages déjà lus pour ne recevoir que les nouveaux messages.Comment marquer les messages reçus par une application Java à l'aide de javax Mail Api?

J'ai trouvé que l'objet message contient des indicateurs (indicateurs système et indicateurs définis par l'utilisateur), mais je n'arrive pas à définir un indicateur défini par l'utilisateur.

Il est possible de marquer les messages reçus par mon application sur le compte e-mail, ou je dois conserver tous les identifiants de message et chaque fois que je reçois des messages d'imap, je dois comparer leur ID avec seulement les messages qui ont des identifiants différents?

Répondre

5

Certains serveurs IMAP ne vous permettent pas de définir des indicateurs définis par l'utilisateur. La plupart font cependant. Via JavaMail, vous souhaitez effectuer les opérations suivantes:

Flags flags = new Flags("fetched"); 
message.setFlags(flags, true); 

Toutefois, ces drapeaux ne sont pas permanents, - un autre client IMAP peut les effacer aussi facilement que vous les définissez. (Bien qu'ils ne sera probablement pas.)

Une autre option est de suivre les messages des UIDs que vous avez vu. Vous pouvez les obtenir via ImapFolder.getUID(Message). Il est plus simple que le suivi des en-têtes Message-ID, qui sont beaucoup plus coûteuses à chercher et, car ils sont des chaînes, occupent plus de mémoire dans votre application.

Une autre option est d'utiliser POP et suivre UIDL s.

+0

Je ne peux pas utiliser UIDs parce qu'avec le temps ces UIDs sont modifiés lorsqu'un message est supprimé ou déplacé. Donc, je l'utilise en-têtes Message-ID, malheureusement il y a quelques e-mails qui ne sont pas les en-têtes Message-ID :( – telebog

+1

Got it. Si vous n'êtes pas seulement aller chercher de la boîte de réception, qui limite vos choix. Ne peut pas faire POP, impossible d'utiliser les UID L'option 'Flags' peut vous convenir le mieux. – dkarp

0

Oui, il est possible de marquer les messages comme lus, et quand la prochaine fois que vous voulez lire les messages que vous ne pouvez lire les nouveaux messages.

Utilisez le code suivant:

Folder emailFolder = emailStore.getFolder("INBOX"); 
Message messages[] = emailFolder.search(new FlagTerm(new Flags(Flag.SEEN), false)); 
System.out.println("no of messages=" + messages.length); 

for (int i = 0; i < messages.length; i++) { 
    Message message = messages[i]; 
    //here write your code to read the message and whatever you wanna do// 
    //now at the end of the message(remember at the end of the message u read using code) write the following code// 
    message.setFlag(Flag.SEEN, true); 
}//end of for loop