Marcar o e-mail como lido - javamail

15 respostas
M

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

15 Respostas

A

setar uma Flag como SEEN não resolve ?

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

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));
M

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)
M

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:

A
mauricioadl:
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)

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 ?

M

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();
M

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.

A

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.

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.
M

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

M

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???

F

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

Abraço.

M

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

Abraço.

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

[]'s

F

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.

M

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.

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

F

Beleza Maurício, obrigado pela ajuda cara!

F
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

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

Segue como fiz:

Classe:
/*
 * 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", "[email removido]", "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();

    }

}
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)
Criado 12 de setembro de 2011
Ultima resposta 3 de out. de 2014
Respostas 15
Participantes 3