Pergunta

Eu escrevi um programa agradável em Java que se conecta a uma conta do Gmail e baixar atachments enviado a ele. Uma vez que um anexo foi baixado, ele é marcado como ler e não é baixado novamente. Este programa terá que ser executado em várias instâncias com cada programa de download de anexos únicos para que um único anexo nunca é baixado duas vezes. O problema é que no momento se o anexo é de um tamanho decente, um programa ainda é baixá-lo, quando outra instância Ligações e também começa a baixar o anexo antes de ter sido marcada como lida.

Eu tentei verificar e definir várias bandeiras e verificar se a pasta está aberta, nada parece funcionar. Todas as soluções?

Update: Obrigado pelas respostas rápidas, infelizmente IMAP não é uma opção devido a outras razões

.
Foi útil?

Solução

Como os outros mencionados, POP3 não é realmente destinado a este tipo de cenário.

Se você absolutamente tem que usar POP3, eu sugiro o download de todos os e-mail para um servidor intermediário que classifica as mensagens e os torna disponíveis para cada um dos outros clientes.

Parece que você está apenas tentando distribuir o processamento dos e-mails. Se for esse o caso, você pode apenas ter cada cliente se conectar ao servidor intermediário para recuperar a próxima mensagem disponível.

Eu não tenho certeza o que suas limitações são, mas você pode até querer considerar recebendo os anexos alguma outra maneira além de e-mail. Se as pessoas são arquivos de upload, você pode configurar um formulário web que envia automaticamente cada arquivo para a próxima instância disponível de sua aplicação para processamento.

Outras dicas

Considere o uso de IMAP em vez -. Ele é projetado para interação cliente-servidor

A partir RFC1939 (Post Office Protocol - Versão 3):

POP3 não se destina a fornecer extensivas operações de manipulação de mensagens no servidor; normalmente, o correio é baixado e, em seguida, excluído. Uma mais avançada (e complexo) protocolo, IMAP4, é discutido em RFC1730 .

Eu não acho que POP3 é feita para múltipla simultânea acesso.

Pergunte-se:? Eu realmente preciso de múltiplos processos acessando a mesma caixa de correio

Se você fizer isso, você terá que encontrar uma maneira de ter estes processos se comunicam uns com os outros. Use um processo de banco de dados ou servidor comum para coordenar as ações.

IMAP faz tem mais opções, mas não tenho certeza se você pode "travar" um único e-mail para marcá-lo como sendo processada.

Se você precisa ficar com uma conexão POP3, você pode manter um banco de dados local de ids de mensagem previamente baixados. Em seguida, novas instâncias poderia verificar contra que antes de baixar novamente. A melhor solução é apenas para uso IMAP, embora, como IMAP é capaz de definir a leitura / bandeiras não lidas antes de baixar.

Você pode marcar o correio como lido antes de iniciar o download, e então começar a baixá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top