Marcar o e-mail como lido - javamail

Pessoal estou fazendo um pequeno cliente de e-mail, gostaria de saber como faço para marcar o e-mail como lido, virei a internet e não estou achando.

Estou usando javamail e pop3.

Vi muita gente falando na net que o pop3 não possui essa opção, porem o cliente thunderbird consegue fazer isso.

Alguem pode ajudar?

Vlw

setar uma Flag como SEEN não resolve ?

http://javamail.kenai.com/nonav/javadocs/index.html

[code]Q: How do I get all the unread messages in a folder?
A: Search for all messages with the SEEN flag not set:

Message[] unreadMessages = folder.search(
	new FlagTerm(new Flags(Flags.Flag.SEEN), false));

[/code]

o java mail reclama quando tento salvar, gera a seguinte exception:


javax.mail.IllegalWriteException: POP3 messages are read-only
	at com.sun.mail.pop3.POP3Message.saveChanges(POP3Message.java:499)
	at br.com.arius.ReadMail.run(ReadMail.java:74)

ele diz que o pop eh somente leitura, so que quando eu baixo um e-mail com o thunderbird e vou no webmail o e-mail esta marcado como lido, ou seja o thunderbird consegue. estranho! :shock:

[quote=mauricioadl]o java mail reclama quando tento salvar, gera a seguinte exception:

[code]

javax.mail.IllegalWriteException: POP3 messages are read-only
at com.sun.mail.pop3.POP3Message.saveChanges(POP3Message.java:499)
at br.com.arius.ReadMail.run(ReadMail.java:74)

[/code][/quote]

eu não lembro de cabeça tem que ver na documentação, mas acredito que não tenha que salvar nada, acredito que para POP3 seja parecido como deletar, você seta a Flag. fecha a pasta e pronto, o que vc quis dizer com salvar ? vc esta fazendo inputstream na pasta ?

se eu apenas setar a flag nada acontece com a mensagem, ela continua vindo como nao lida, entao eu tento salvar a modificacao na mensagem ae gera o erro

// seta a flag
message.setFlag(Flags.Flag.SEEN, true);

// salva a modificacao
message.saveChanges();

outra coisa que acabei de reparar, se usar o pop3 o comando:
message.isSet(Flags.Flag.SEEN)

sempre retorna false independe se a mensagem foi lida ou nao.
se usar imap ele retorna correto.

[quote=mauricioadl]outra coisa que acabei de reparar, se usar o pop3 o comando:
message.isSet(Flags.Flag.SEEN)

sempre retorna false independe se a mensagem foi lida ou nao.
se usar imap ele retorna correto.[/quote]

lendo a documentação agora vi que:

http://javamail.kenai.com/nonav/javadocs/com/sun/mail/pop3/package-summary.html

POP3 supports no permanent flags (see Folder.getPermanentFlags()). In particular, the Flags.Flag.RECENT flag will never be set for POP3 messages. It’s up to the application to determine which messages in a POP3 mailbox are “new”. There are several strategies to accomplish this, depending on the needs of the application and the environment:

acredito que seja possivel assim: verificando o UID da mensagem.

getUID ( Message msg)
Retornar a string ID único para esta mensagem, ou null se não estiver disponível.

so que o folder nao eh a mensagem e sim a pasta que contem as mensagens. entao o id unico dele nao serve.

achei na documentacao que pop3message NÃO pode ser alterada mesmo, sera preciso fazer alguma manobra para isso. basta saber como os clientes de e-mail comum faz.

sugestoes???

Mauricio.
Desculpa ressuscitar o tópico, mas, conseguiu resolver essa bagaça?

Abraço.

[quote=Franciscato]Mauricio.
Desculpa ressuscitar o tópico, mas, conseguiu resolver essa bagaça?

Abraço.[/quote]

Cara, pra falar a verdade eu não resolvi! Forcei os clientes a usarem IMAP, dae funfa de boa!

[]'s

OK.
Vou acabar forçando os clientes a usar IMAP mesmo.
Mais uma coisa: Voce está movendo as mensagens de pasta ou apenas marcando-as com a Flags.flag.SEEN?

Valew.

[quote=Franciscato]OK.
Vou acabar forçando os clientes a usar IMAP mesmo.
Mais uma coisa: Voce está movendo as mensagens de pasta ou apenas marcando-as com a Flags.flag.SEEN?

Valew.[/quote]

No início eu marcava como seen, mas depois eu comecei mover para uma pasta de backup prq se não me engano o javamail traz todos os e-mails, mesmo os que estão marcados. dae ficava bem lento.

[]'s

Beleza Maurício, obrigado pela ajuda cara!

[quote]No início eu marcava como seen, mas depois eu comecei mover para uma pasta de backup prq se não me engano o javamail traz todos os e-mails, mesmo os que estão marcados. dae ficava bem lento.

[]'s[/quote]

Sem querer explorar, mas já explorando, minha pasta simplesmente se nega a existir. Como ficou sua construção?

Segue como fiz:

Classe:

[code]/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package com.mycompany.leremail;

import java.io.IOException;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;

/**
*

  • @author DBS
    */
    public class Main {

    public static void main(String[] args) throws MessagingException, IOException {

     System.setProperty("javax.net.ssl.trustStoreType", "JKS");
     System.setProperty("javax.net.ssl.trustStore", "C:\\ImportacaoNF-e\\jssecacerts");
     System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
     
     Properties props = new Properties();
     props.setProperty("mail.store.protocol", "imap");
    
     Session session = Session.getInstance(props, null);
    
     Store store = session.getStore();
     store.connect("mail.unicampo.coop.br", "nfe@unicampo.coop.br", "secret");
    
     Folder folder = store.getFolder("INBOX");
    
     folder.open(Folder.READ_WRITE);
    
     for (Message message : folder.getMessages()) {
         System.out.println(message.getSubject());
     }
     
     Folder folderLidas = store.getFolder("lidas");
     folderLidas.open(Folder.HOLDS_FOLDERS);
     folder.copyMessages(folder.getMessages(), folderLidas);
    
     folder.close(true);
     store.close();
    

    }

}
[/code]

Saída do depurador:

Mensagem de confirmação/Confirmation message (Unicampo - Nota Fiscal de Serviço Eletrônica -) Exception in thread "main" javax.mail.FolderNotFoundException: folder is not INBOX at com.sun.mail.pop3.POP3Folder.open(POP3Folder.java:205) at com.mycompany.leremail.Main.main(Main.java:46)